C# 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

是否可以先用代码在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 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
    之前,将所有相关的
    PersonHist
    设置为null,或者在删除集null时实现自定义数据库初始值设定项并将引用约束替换为
如果您不需要外键,请不要将其用作导航属性,并使用单独的查询来获取person的历史记录,但它仍然需要一些指向原始
person
记录的列