2014-01-13 84 views
4

我發現的大多數問題都不是我正在尋找的類型。實體框架兩端可選1對1關係

我有2個表:

public class User 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid UserId { get; set; } 

    public Guid? CustomerId { get; set; } 

    [ForeignKey("CustomerId")] 
    public Customer Customer { get; set; } 
} 

public class Customer 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid CustomerId { get; set; } 

    public Guid? UserId { get; set; } 

    [ForeignKey("UserId")] 
    public User User { get; set; } 
} 

User罐存在而不被一個CustomerCustomer而不一個User可以存在。

我試過這樣流暢的API:

modelBuilder.Entity<Customer>() 
    .HasOptional<User>(c => c.User) 
    .WithOptionalDependent(c => c.Customer) 
    .Map(c => c.MapKey("UserId")); 

但它不斷給我這個錯誤,當我嘗試創建遷移:

Customer_User_Source: : Multiplicity is not valid in Role 'Customer_User_Source' in relationship 'Customer_User'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.

更新

我將我的模型更改爲:

public class User 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid UserId { get; set; } 

    public virtual Customer Customer { get; set; } 
} 

public class Customer 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid CustomerId { get; set; } 

    public virtual User User { get; set; } 
} 

隨着流利的API:

modelBuilder 
    .Entity<Customer>() 
    .HasOptional(l => l.User) 
    .WithOptionalPrincipal() 
    .Map(k => k.MapKey("CustomerId")); 

modelBuilder 
    .Entity<User>() 
    .HasOptional(c => c.Customer) 
    .WithOptionalPrincipal() 
    .Map(k => k.MapKey("UserId")); 

這似乎是工作,但有沒有辦法來定義的,而不必使用MapKey在模型中的列?

回答

2

link 1

而且link 2

與鏈接的問題是我不知道,如果他們提供了一個實際的解決問題的辦法:因爲我不知道這是否爲提供唯一性兩個表中都有外鍵(正如link建議的那樣)。因爲沒有EF獨特的限制,你必須手動創建它(在生成器中)

最後link解釋執行1:*關係的唯一形式是使用其中一個表的外鍵作爲另一個主鍵。

祝你好運。

+1

感謝第二個鏈接指出我正確的方向,你也許有我的編輯答案? – YesMan85

+0

您是否看到編輯過的答案? – rlartiga

+0

我讀過呀。我認爲這是EF實施的罪魁禍首。我首先創建了表模型,然後從中生成代碼。 EF實際上使它成爲1 .. *關係而不是1..1關係。 – YesMan85