我先使用實體框架代碼並最近創建了一個名爲ImportantCases的新Repo模型/表。實體框架無法將NULL值插入列標識規範設置爲否
我已經建立了就像所有其他的配置和型號然而,當我到達這條線在我的代碼:
public int CreateImportantCase(ImportantCase newImportantCase)
{
_context.ImportantCases.Add(newImportantCase);
_context.SaveChanges(); // <--- here
return newImportantCase.ImportantId;
}
我收到此錯誤:
Cannot insert the value NULL into column 'ImportantId', table 'MyDatabase.dbo.ImportantCases'; column does not allow nulls. INSERT fails. The statement has been terminated.
我的模型/配置是這樣的:
型號
public class ImportantCase
{
public int ImportantId { get; set; }
public int EvpId { get; set; }
public string Comment { get; set; }
public int CategoryId { get; set;}
}
EF配置
class ImportantCaseConfiguration : EntityTypeConfiguration<ImportantCase>
{
public ImportantCaseConfiguration()
{
HasKey(x => x.ImportantId);
}
}
之前要調用的創建方法,我使用視圖模型和模型綁定通過從視圖Post方法建立新ImportantCase
:
if (imp != null) // already a record, so update
{
imp.Comment = modifiedExceptionPersonViewModel.Comment;
imp.CategoryId = int.Parse(modifiedExceptionPersonViewModel.SelectedCategory);
_service.UpdateImportantCase(imp);
}
if (imp == null) //no record so create
{
ImportantCase newImportantCase = new ImportantCase();
newImportantCase.Comment = modifiedExceptionPersonViewModel.Comment;
newImportantCase.CategoryId = int.Parse(modifiedExceptionPersonViewModel.SelectedCategory);
newImportantCase.EvpId = modifiedExceptionPersonViewModel.EvpId;
_service.CreateImportantCase(newImportantCase);
}
我檢查了newImportantCase
對象之前SaveChanges
,它看起來和我所期望的一樣,ImportantId
設置爲「0」,通常EF將會創建一旦寫入完成,即爲ID。
但我注意到的一件事是,當我查看該表的設計時,EF規範創建的所有其他表都設置爲Yes
,我做了哪些改變?
注
EvpId
是正在從視圖返回的視圖模型的ID,我剛剛推出的類別和註釋屬性這個視圖模型,以便在控制器分別處理。
編輯
我剛剛意識到我愣神設置ImportantId
爲字符串,當我跑最初update-database
但後來增加了一個新的遷移稍後糾正這一點,並沒有意識到EF不追溯理清身份規範,有沒有辦法解決這個問題?
要設置標識規範,你可以做到這一點'[關鍵] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity) 公衆詮釋ImportantId {獲得;組; }' – Eldho
@Eldho如果我現在刪除那個表並運行update-database,會發生什麼,因爲我已經將ImportantId正確設置爲int了,它會對它進行排序嗎? – JsonStatham
我想你可以按照上面的註釋來更新你的'ImportantCase'模型並嘗試更新數據庫,否則你可以刪除表並重新運行 – Eldho