C# 是否使用实体框架删除链接到SQL Server数据库中另一个数据库表的数据?
我正在尝试从数据库中删除以下行之一: 使用此代码:C# 是否使用实体框架删除链接到SQL Server数据库中另一个数据库表的数据?,c#,asp.net,sql-server,entity-framework,C#,Asp.net,Sql Server,Entity Framework,我正在尝试从数据库中删除以下行之一: 使用此代码: public ActionResult DeleteRowUsers(int id) { var status = false; var message = ""; using (ConcurrentDBEntities2 db = new ConcurrentDBEntities2()) { var data = db.Companies.Find(id
public ActionResult DeleteRowUsers(int id)
{
var status = false;
var message = "";
using (ConcurrentDBEntities2 db = new ConcurrentDBEntities2())
{
var data = db.Companies.Find(id);
if (data != null)
{
db.Companies.Remove(data);
db.SaveChanges();
status = true;
}
else
{
message = "Error!";
}
return RedirectToAction("Users");
}
}
但是,CompanyID链接到另一个表:
当我尝试删除此项时,我得到以下错误:
DELETE语句与引用约束\FK\u apirect\u CompanyID\冲突。数据库\ConcurrentDB\表\dbo.apirects\列“CompanyID”中发生冲突。\r\n语句已终止
我想要实现的是删除第一个表中的整行和其他表中的所有链接项
有人知道如何实现这一点吗?在扩展DbContext的类中,它应该是这样的:
public class MyContext : DbContext
{
...
}
您需要重写OnModelCreating方法,如下所示:
public class MyContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Companies>()
.HasOne(c => c.CompanyId)
.WithMany(a => a.ApiRedirects)
.HasForeignKey(a => a.CompanyId)
.OnDelete(DeleteBehavior.Cascade);
}
}
但这可能需要重新创建数据库才能应用此更改。但是,这是您可以在EF中操作DeleteBehavior的方法。将FK更改为级联删除或在删除Parents之前删除子行。在哪里可以执行此操作?