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,你必须实现一个 one 到 many 的关系,并在业务层处理唯一性。
请参阅
我在寻找在 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,你必须实现一个 one 到 many 的关系,并在业务层处理唯一性。
请参阅