我有以下表結構:在代碼優先1對零關係
用戶:
用戶ID
名稱
CountryId
國家
CountryId
名稱
其中表用戶的CountryId是國家/地區表的外鍵。
在代碼中,我有以下實體:
public class User
{
public int Id{get; set;}
public int CountryId {get; set;}
public virtual Country Country {get; set;}
public string Name {get; set;}
}
public class Country
{
public int Id {get; set;}
public string Name {get; set;}
}
表國家存儲用戶可以屬於10個可用的國家名單。不要爲了數據庫模型而殺了我,它必須是這樣,遺留問題。
的關係被定義爲通過流暢API如下:
modelBuilder.Entity<User>()
.HasRequired<Country>(c => c.Country)
.WithMany()
.HasForeignKey(c => c.CountryId);
的問題是每一次我嘗試插入一個新的用戶進入數據庫時,模型中定義試圖插入一個新進入該國表,以及和我得到以下錯誤:
Cannot insert the value NULL into column 'id', table '.countries'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated.
爲什麼EF試圖插入新記錄到該國表,以及我怎樣才能解決這個問題,只插入一個新的用戶和更新用戶的國家已有國家的名單?
你能證明只需插入用戶的代碼? –
你是對的。問題是插入用戶時,而不是像下面這樣做:var country = ctx.Countries.FirstOrDefault(c => c.Id == countryId); user.Country = country;我在做user.Country =新國家{Id = countryId;名稱=「bla」},這是不正確的,因爲基本上我正在創建一個新的國家。 – Elena
涼爽。爲了記錄,你不需要從上下文中選擇國家,你可以設置'user.CountryId = countryId'。 –