我有以下实体:
public class Revision
{
public int Id { get; set; }
...
public int? PreviousRevisionId { get; set; }
public virtual Revision PreviousRevision { get; set; }
}
我需要的是使用 PreviousRevision
作为导航属性并使用 PreviousRevisionId
作为它的外键 ID 在同一实体内创建可选到可选的关系。
我知道这可以通过使用 [ForeignKey("PreviousRevision")]
属性注释 PreviousRevisionId
属性来完成,但是流畅的 api 呢?
我试过:
HasOptional(c => c.PreviousRevision)
.WithOptionalDependent()
.Map(m => m.MapKey("PreviousRevisionId"));
,但在进行迁移时出现错误:
PreviousRevisionId: Name: Each property name in a type must be unique. Property name 'PreviousRevisionId' is already defined.
所以,基本上,使用流畅的 API 看起来是不可能的。但我认为注释功能是 Fluent API 功能的一个子集,不是吗?
最佳答案
MapKey
当您不想将外键作为模型类中的属性并且想要重命名 EF 在数据库中默认提供的 FK 列名称时使用。
所以,您在这里有两个选择:
您可以像以前那样映射您的一对一关系,但是 您需要删除
PreviousRevisionId
属性:HasOptional(c => c.PreviousRevision).WithOptionalDependent();// If you want now you can rename the FK column using .Map(m => m.MapKey("PreviousRevisionId"));
或者您可以创建一个单向的一对多关系:
HasOptional(c => c.PreviousRevision).WithMany().HasForeignKey(p => p.PreviousRevisionId);
我认为最后一个选项更适合您想要实现的目标。
关于c# - EF6.1 optional-to-optional with fluent api mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32204573/