1

我在找出在 EF 6.1.3 中映射我的Client/Person类的正确方法时遇到了一些麻烦。

    public class Client
    {
      public int ClientId { get; set; }
      public int PersonId { get; set; } // FK

      // Navigation Properties
      public virtual Person Person { get; set; }
    }

    public class Person
    {
      public int PersonId { get; set; }
    }

这是它的工作原理:

客户需要一个人,人有一个可选的客户。

FK 在 Client 类中,但我不能这样做:

public class ClientMap : EntityTypeConfiguration<Client>
{
    public ClientMap()
    {
        // Primary Key
        HasKey(t => t.ClienteId);

        // Properties
        Property(t => t.ClientId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); // Auto-increment
        Property(t => t.PersonId).IsRequired(); // FK to Person

        // Relationships
        // Error here, HasForeignKey doesnt exists.
        HasRequired(t => t.Person).WithOptional().HasForeignKey(t => t.PersonId);

        // Table
        ToTable("Client");
    }
}

我已经看过 MapKey 方法,但我不确定它是如何工作的,因为我读到它仅在您的 FK 属性未在模型中声明时使用,但在我的场景中,它在Client类中声明为PersonId 。

Person类没有对Client的导航属性,只有对Person的Client

问题:如何使用 ClientMap 类中的 Fluent API 正确映射它?

任何帮助将不胜感激。

4

1 回答 1

1

您正在尝试实现一对一可选关系。

在这种情况下,EF 期望可选实体有一个外键,它也是主键。这是 EF 的唯一方法。

如果你想要一个单独的FK,你必须实现一对多的关系并在业务层处理唯一性。

请参阅与实体框架的 1 对 1 设置关系

于 2015-04-27T16:26:00.203 回答