C# - EF 6 关系流利 API (1:1..0)

C# - EF 6 Relationships Fluent API (1:1..0)

我在寻找在 EF 6.1.3 中映射我的 Client/Person classes 的正确方法时遇到一些问题。

    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; }
    }

这是它的工作原理:

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

FK 在客户端class 但我做不到这个关系:

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 class.

中的 PersonId

class 将不会 属性 到 客户 ,只有 客户

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

非常感谢任何帮助。

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

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

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

请参阅