2016-01-20 98 views
0

我正在與EF代碼首先作戰,試圖映射1:1關係,沒有喜悅。使用EF CodeFirst創建1:1關係

基本上用戶可以有一個userdetail。

我在這兩個表上設置主鍵。在我的UserDetail表中有字段UserId我試圖用作FK。

public class User:BaseModel 
{ 
    public virtual UserDetail UserDetail { get; set; } 
    public string UserName { get; set; } 
} 
public class UserDetail:BaseModel 
{ 
    public virtual User User { get; set; } 
    [ForeignKey("User")] 
    public int UserId { get; set; } 
    public string UserDetailName { get; set; } 
} 
public class BaseModel{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
} 

,當我嘗試使用add-migration命令我得到這個錯誤

UserDetail_User_Source:多重不是在關係 'UserDetail_User' 角色 'UserDetail_User_Source' 有效。因爲「依賴角色」屬性不是關鍵屬性,所以「依賴角色」的多重性的上界必須爲「*」。

我需要做些什麼才能使它工作?當然,這不應該那麼困難?

更新下面基於從@史蒂夫綠色

評論我配置了像史蒂夫的fluentapi建議

modelBuilder.Entity<User>() 
        .HasRequired(t => t.UserDetail) 
        .WithRequiredPrincipal(t => t.User); 

但是生成的遷移步驟看起來我錯了

CreateTable(
      "dbo.Users", 
      c => new 
       { 
        UserId = c.Int(nullable: false, identity: true), 
        UserName = c.String(), 
       }) 
      .PrimaryKey(t => t.UserId); 

     CreateTable(
      "dbo.UserDetails", 
      c => new 
       { 
        UserDetailId = c.Int(nullable: false, identity: true), 
        UserId = c.Int(nullable: false), 
        UserDetailName = c.String(), 
       }) 
      .PrimaryKey(t => t.UserDetailId) 
      .ForeignKey("dbo.Users", t => t.UserDetailId) 
      .Index(t => t.UserDetailId); 

FK配置爲UserDetailId sh ouldnt它是UserId

稍加修改模型

public class UserDetail 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserDetailId { get; set; } 
    public virtual User User { get; set; } 
    public int UserId { get; set; } 
    public string UserDetailName { get; set; } 
} 
+0

的可能的複製[大到與實體框架代碼首先主鍵一對一的關係(http://stackoverflow.com/questions/5339951/one-初級密鑰與實體框架代碼優先) –

+0

這略有不同。我沒有能力在我的模型上在我的主鍵上添加[ForeignKey]屬性。由於我所有的模型都是使用主鍵從基礎模型類繼承而來的。我會更新我的代碼示例 –

回答

0

在UserDetail擺脫屬性

[ForeignKey("User") 

的。另外,我想補充

int UserDetailId 

到用戶

那麼這應該工作。