【发布时间】:2011-04-28 22:32:36
【问题描述】:
我根据这个答案实现了双向 1:1 关系:
Primary /Foreign Key in Entity Framework
我这样定义双向关系:
public class Student
{
public virtual int StudentId { get; set; }
public virtual Anamnesis Anamnesis { get; set; }
. . .
}
public class Anamnesis
{
[Key, ForeignKey("Student")]
public int AnamnesisId { get; set; }
public virtual Student Student { get; set; }
. . .
}
其中,Student 是主要实体,而 Anamnesis 是共享 PK 的实体。
现在我希望创建的关系具有删除规则 = CASCADE。实际上,正在创建的关系具有 Delete Rule = NO ACTION,如下图所示:
如果我在“表属性”窗口中手动删除此关系并使用 Delete Rule = CASCADE 添加其他关系,代码将按预期工作,允许我删除一个学生,并且它是具有相同 ID 的共享病历。
那么,我的问题来了:
有没有办法在我的班级中使用数据注释(不是 Fluent API),以便我获得与 CASCADE 删除规则的关系?我更喜欢使用 Data Annotation,但如果不可能,我会很高兴有一些 Fluent API 代码可以使这项工作。
注意
我已经尝试了post 中显示的 Fluent API 代码。在我有双向属性的情况下,它不起作用。
【问题讨论】:
-
Uhmmm... 现在我发布了这个问题,我发现我忘记了
AnamnesisId属性的virtual关键字,以符合上面链接的 Ladislav 的答案。也许这就是问题所在。我必须重新测试一遍。 :D -
你能显示完整的代码吗? EF 代码优先在每次可能时默认使用级联删除,并且我在链接问题中的两个示例也使用它。
-
@Ladislav:再次测试并检查在数据库中创建的关系。它保持不变。没有级联。因此, virtual 关键字不是问题。定义关系的代码就是我上面展示的代码。你还需要什么吗?
-
你能用完整的 SQL 服务器测试这个吗?
-
@Ladislav:我会测试它,但@Morteza 展示了如何使用 Fluent API 代码来实现它。无论如何感谢您的帮助。
标签: ef-code-first sql-server-ce entity-framework-4.1 cascade cascading-deletes