c# - EF6.1 optional-to-optional with fluent api mapping

标签 c# entity-framework

我有以下实体:

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/

相关文章:

c# - 字符串解析并找到常见的空白位置

c# - MonoMac 系统.Drawing.Image.GetPropertyItem(0x5100)

c# - 有没有办法避免为每个 Func 参数计数使用 Func<T, ...> 参数重载方法

c# - 将两个 C# DbGeography 多边形连接成一个多边形

.net - Entity framework : Need a easy going, clean数据库迁移解决方案

entity-framework - 修改 Entity Framework 迁移是否安全,以便以不同的方式执行而不是删除并重新创建索引?

c# - 无法通过嵌套类型访问外部类型的非静态成员

c# - 如果 smtp 服务器需要授权,我如何使用 .NET 4 发送电子邮件?

linq - Entity Framework 中的复杂连接

c# - 如果参数为空则排除条件