簡體   English   中英

在實體框架中使用savechanges()時,列名無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM