我正在與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; }
}
的可能的複製[大到與實體框架代碼首先主鍵一對一的關係(http://stackoverflow.com/questions/5339951/one-初級密鑰與實體框架代碼優先) –
這略有不同。我沒有能力在我的模型上在我的主鍵上添加[ForeignKey]屬性。由於我所有的模型都是使用主鍵從基礎模型類繼承而來的。我會更新我的代碼示例 –