与EF6的0..1,1..1关系(流利)

时间:2014-06-26 13:38:40

标签: c# .net entity-framework-6 fluent

我有这两个模型:

public partial class Account
{
    public Account() {}

    public Guid Id { get; set; }

    // ...

    public virtual Customer Customer { get; set; }
}

public partial class Customer
{
    public Customer() {}
    public Guid Id { get; set; }
    public Guid AccountId { get; set; }

    // ...

    public virtual Account Account { get; set; }
}

如何在帐户中设置(使用流利的)可选的Customer实体,而不包含可空的CustomerId?

** Customer表上的AccountId是一个唯一的密钥。

3 个答案:

答案 0 :(得分:0)

应该是这样的:

modelBuilder.Entity<Account>() 
            .HasKey(t => t.Id); 


modelBuilder.Entity<Account>() 
            .HasOptional(t => t.Customer) 
            .WithRequired(t => t.Account);

请让Ids不可空。主键不应该设计为null。

参考:http://msdn.microsoft.com/en-us/data/jj591620.aspx#RequiredToOptional

答案 1 :(得分:0)

已解决从客户中删除AccountId并使用其ID作为相应帐户的外键。

答案 2 :(得分:0)

像这样设置模型:

public class Account
{
    [Key]
    public long ID { get; set; }

    public virtual Customer Customer { get; set; }
}

public class Customer
{
    [Key]
    public long AccountID { get; set; }

    [ForeignKey("AccountID")]
    public virtual Account Account { get; set; }
}

然后连接这样的模型:

modelBuilder.Entity<Account>()
    .HasOptional(x => x.Customer)
    .WithRequired(x => x.Account);

请注意Customer主键也是外键。这是因为您的实体关系图如下所示:

Entity Relationship Diagram

客户实体是weak entity (link),依赖于(强)帐户实体。