我基于这个答案实现了双向1:1关系:
我这样定义双向关系:
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; }
. . .
}
Run Code Online (Sandbox Code Playgroud)
其中,学生是主要实体,Anamnesis是共享PK的实体.
现在我想创建的关系有一个Delete Rule = CASCADE.实际上,正在创建的关系具有Delete Rule = NO ACTION,如下图所示:

如果我在"表格属性"窗口中手动删除此关系并使用"删除规则"="CASCADE"添加其他关系,则代码将按照我的预期允许我删除学生并且它具有相同ID的共享Anamnesis.
所以,这是我的问题:
有没有办法在我的类中使用Data Annotation(不是Fluent API),以便获得与CASCADE删除规则的关系?我更喜欢使用Data Annotation但是如果不可能的话,我会对使用它的一些Fluent API代码感到满意.
注意
我已经尝试了这篇文章中显示的Fluent API代码.它在我有双向属性的情况下不起作用.
cascade sql-server-ce cascading-deletes ef-code-first entity-framework-4.1
我拥有的数据库的设置Company可以有很多Engineer,也可以有很多Territory.如果我应该从列表中删除公司,我需要做一个干净的退出,所以不要只删除公司表格中的公司表格.我必须确保所有记录都被删除.因此,没有子/相关记录成为孤儿数据.
如果我要从所有表中删除一条记录,我只想删除它FirstOrDefault,然后我可以使用
public void RemoveCompany(long companyId)
{
using (var db = new BoilerServicingDbContext())
{
var ec = db.Engineers.FirstOrDefault(x => x.CompanyId == companyId);
db.Engineers.Remove(ec);
var tc = db.CompanyTerritories.FirstOrDefault(x => x.CompanyId == companyId);
db.CompanyTerritories.Remove(tc);
var p = db.Companies.FirstOrDefault(x => x.Id == companyId);
db.Companies.Remove(p);
db.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每个公司有多个工程师,每个公司有一个以上的领土.是否有一个简单的方法,如一般的数据库意义.
DELETE * FROM Engineers WHERE companyId = 1;
Run Code Online (Sandbox Code Playgroud)
此刻我没有Cascading删除设置,所以除此之外.任何其他选择.
c# model-view-controller asp.net-mvc entity-framework cascade