我有这两个实体
class AUT
{
public Guid ID { get; set; }
public string Name { get; set; }
public Engineer Engineer { get; set; }
}
class InstallationSetup
{
public virtual AUT ApplicationUnderTesting { get; set; }
public Guid ID { get; set; }
// Loads of properties etc
}
class Engineer
{
public Guid ID { get; set; }
public string Name { get; set; }
}
首先使用代码和一些数据注释,这些实体创建一个数据库。我正在使用EF 5,当我删除一个应用程序时,它应该只删除自己和已引用它的任何InstallationSetup。它不应该删除工程师。但是,当我尝试删除它时,我收到错误:
DELETE语句与REFERENCE约束“FK_dbo.InstallationSetups_dbo.AUTs_ApplicationUnderTesting_ID”冲突。冲突发生在数据库“UXLab”,表“dbo.InstallationSetups”,列“ApplicationUnderTesting_ID”中。 声明已经终止。
所以,我猜这是因为有另一个表依赖于AUT的条目,通过删除AUT,你将使InstallationSetup保留为null外键,从而导致行断开。
我应该能够(最好不使用Fluent API)告诉实体框架是否也应该删除任何引用AUT的东西?这就是我想要实现的目标。
答案 0 :(得分:3)
您只需要添加一个与生成的外键列类似的列,当实体框架生成此FK列时,它将级联删除设置为禁用。
class AUT
{
public Guid ID { get; set; }
public string Name { get; set; }
public Engineer Engineer { get; set; }
}
class InstallationSetup
{
public virtual AUT ApplicationUnderTesting { get; set; }
public int ApplicationUnderTestingId {get; set;} <--- Add this.
public Guid ID { get; set; }
// Loads of properties etc
}
class Engineer
{
public Guid ID { get; set; }
public string Name { get; set; }
}
如果再次生成数据库,则会看到某些内容已更改。自动生成的列AUTs_ApplicationUnderTesting_ID不再存在,ApplicationUnderTestingId列现在用于外键关系。
EF现在会自动启用级联删除。