2016-07-14 92 views
2

我無法在EF 6映射一對一的關係我的類別是:無法在實體框架映射一對一6

public class Membership 
{ 
    [Key] 
    public decimal Id { get; set; } 

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

public class User 
{ 
    [Key] 
    public decimal Id { get; set; } 

    [ForeignKey("Id")] 
    public virtual Membership Membership { get; set; } 

} 

我得到異常:

無法確定 類型的「用戶」和「成員資格」之間關聯的主要結尾。該協會 的主要目標必須使用關係流暢的API 或數據註釋進行顯式配置。

我覺得我的問題是兩個表具有相同的鍵值,不存儲其他的鍵。謝謝。

+0

你有沒有看教程呢? [配置一對零關係](http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx) – Igor

+0

此外,爲什麼使用對於id列,int或long的「decimal」將是更好的選擇。 – Igor

+0

表格之間不能有真實的1-1關係。一方必須是可選的,否則您將永遠無法添加一行,因爲每方都需要另一方存在。 –

回答

0

這將工作

public class Membership 
{ 
[Key] 
public decimal Id { get; set; } 

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

public class User 
{ 
[Key] 
public decimal Id { get; set; } 

[ForeignKey("Membership ")] 
public decimal MemberShipId {get;set;} 
public virtual Membership Membership { get; set; } 

} 
0

你應該refer to this thread每拉吉斯拉夫,我會在這裏放的內容,以及雖然。

在一個一對一關係一端必須是主要和第二端必須 依賴。主要目的是先插入 並且可以存在沒有依賴關係的那個。從屬端是 其中一個必須插在委託人後面,因爲它具有對委託人的外鍵 。

在實體框架FK在依賴的情況下,也必須是它的PK所以 你的情況下,你應該使用:

public class Boo 
{ 
    [Key, ForeignKey("Foo")] 
    public string BooId{get;set;} 
    public Foo Foo{get;set;} 
} 

或者用流利的映射:

modelBuilder.Entity<Foo>() 
      .HasOptional(f => f.Boo) 
      .WithRequired(s => s.Foo);