是否可以先使用代码在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; }
}
想象一下:一个人被多次更改,因此在Person中是一个条目,在PersonHist中是N个历史条目。现在我删除了Person,所以Person不应该有这个Person而PersonHist现在有一个更多的条目。但是用外键这是不可能的...... (我不希望在Person中删除Flag / Column!,但我想要一个从Person到PersonHist的导航属性......)
答案 0 :(得分:0)
导航属性背后的逻辑基于外键。因此,如果要映射它并将其用作导航属性,则必须在PersonHist
中使用外键。您可以使密钥可以为空,但您必须正确使用它:
PersonHist
或实现自定义数据库初始化程序并将引用约束替换为Person
ON DELETE SET NULL
如果您不想使用外键,请不要将其用作导航属性,并使用单独的查询来获取人员的历史记录 - 但仍需要一些列指向原始Person
记录。