C# EF41中的导航属性是否先使用代码,而不使用外键?
是否可以先用代码在EF41中创建/映射导航属性,而不使用外键? 就我而言,我需要它来进行历史化:C# EF41中的导航属性是否先使用代码,而不使用外键?,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,是否可以先用代码在EF41中创建/映射导航属性,而不使用外键? 就我而言,我需要它来进行历史化: public class Person { public virtual Guid ID { get; set; } public virtual string Name { get; set; } public virtual IList<PersonHist> History { get; set; } } public class PersonHist { public
public class Person
{
public virtual Guid ID { get; set; }
public virtual string Name { get; set; }
public virtual IList<PersonHist> History { get; set; }
}
public class PersonHist
{
public virtual Guid ID { get; set; }
public virtual Guid PersonID { get; set; }
public virtual string Name { get; set; }
}
公共类人物
{
公共虚拟Guid ID{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟IList历史记录{get;set;}
}
公共类个人主义者
{
公共虚拟Guid ID{get;set;}
公共虚拟Guid PersonID{get;set;}
公共虚拟字符串名称{get;set;}
}
想象一下:一个人被改变了好几次,所以在Person中是一个条目,在PersonHist中是N个历史条目。现在我删除了这个人,所以这个人不应该有这个人,PersonHist现在又多了一个条目。但是使用外键是不可能的。。。
(我不想删除Person!中的标志/列,但我想要Person到PersonHist之间的导航属性…导航属性背后的逻辑基于外键。因此,如果要映射它并将其用作导航属性,则必须在
PersonHist
中使用外键。您可以使密钥为空,但必须正确使用它:
- 修改映射以删除默认情况下使用的级联删除
- 在删除
之前,将所有相关的Person
设置为null,或者在删除集null时实现自定义数据库初始值设定项并将引用约束替换为PersonHist
person
记录的列