我有以下实体:
public class Revision
{
public int Id { get; set; }
...
public int? PreviousRevisionId { get; set; }
public virtual Revision PreviousRevision { get; set; }
}
我需要的是使用PreviousRevision
作为导航属性在同一实体中创建可选 - 可选关系,并使用PreviousRevisionId
作为其外键ID。
我知道可以通过使用PreviousRevisionId
属性注释[ForeignKey("PreviousRevision")]
属性来完成,但是流畅的api呢?
我试过了:
HasOptional(c => c.PreviousRevision)
.WithOptionalDependent()
.Map(m => m.MapKey("PreviousRevisionId"));
,但正在进行迁移我收到错误:
PreviousRevisionId:Name:类型中的每个属性名称必须是唯一的。 物业名称' PreviousRevisionId'已定义。
所以,基本上,使用流畅的API看起来是不可能的。但我认为注释功能是流畅的API功能的一个子集,不是吗?
答案 0 :(得分:3)
如果您不希望将外键作为模型类中的属性,并且您希望重命名EF在数据库中默认提供的FK列名称,则使用MapKey
。
所以,你有两个选择:
您可以按照以前的方式映射您的一对一关系,但是
您需要删除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);
我认为最后一个选项更适合你想要实现的目标。
答案 1 :(得分:0)
请尝试以下代码:
public class Revision
{
public int Id { get; set; }
...
public int? PreviousRevisionId { get; set; }
public virtual Revision PreviousRevision { get; set; }
public virtual ICollection<Revision > PreviousRevisions { get; set; }
}
和映射:
HasMany(a => a.PreviousRevisions).WithOptional(p => p.PreviousRevision ).HasForeignKey(p => p.PreviousRevisionId )