[英]Invalid Column name when using savechanges() in entity framework
因此,這很重要,我更改了數據庫架構,並更改了其中一個表的PK,並且刪除了與舊PK(在另一個表中的FK參考)相關的所有內容。
但是,當我使用savechanges()方法插入新實體時出現此異常
ex = {“更新條目時發生錯誤。有關詳細信息,請參見內部異常。”}
而內部的例外是
InnerException = {“無效的列名'Audit_ID'。”}
Audit_ID是舊的PK。
嘗試使用SQL將數據插入數據庫時,我嘗試了此“無效的列名”
嘗試使用DbContext將實體添加到數據庫時此無效的列名稱
沒什么能解決我的問題,所以當我刪除整個edmx並創建一個新的edmx時,它也無法正常工作。
ps:我正在使用數據庫優先方法
這些解決方案均無效,因為問題實際上出在SQL Server數據庫中。
我運行SQL Profiler並執行了程序insert語句,我發現錯誤出在表的觸發器之一中,該觸發器具有Previous列名,將其更改為新的PK並最終起作用。
因此,如果有人遇到類似問題,則帖子中的上述鏈接可能會有所幫助,或者您應該檢查問題是否確實在數據庫服務器上發生。
從ef模型中刪除/刪除表(通過查看模型瀏覽器視圖確保將其刪除)。
重建解決方案。
確保您的表已保存。 檢查您的連接字符串,以及您引用正確的數據庫。
通過更新模型工具再次添加表。
編輯:更好地閱讀問題
創建自己的ModelKeyBuilder類。
class MyOwnModelKeyBuilder
{
public static void BuildCompositeKeys(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<YourEntity>()
.Ignore(x=>x.Audit_ID)
.HasKey(x=>x.NewPrimaryKey);
}
}
並在您的Model.Context.cs中
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
MyOwnModelKeyBuilder.BuildCompositeKeys(modelBuilder);
}
這可能不是一個直接的解決方案,因為我不知道表的結構,但可能會對您有所幫助。
在可能的情況下,我們發現在上下文中定義數據庫元素可以解決該問題。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("database_schema");
modelBuilder.Entity<EntityNameInModel>().ToTable("table_in_database").HasKey(ats => ats.id);
modelBuilder.Entity<EntityNameInModel>().Property(ats => ats.user_name).HasColumnName("user_name");
}
您將需要以這種方式定義每個模式,表和字段...但是之后,您將對代碼具有絕對的控制權。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.