Sql server 在实体框架中使用savechanges()时列名无效

Sql server 在实体框架中使用savechanges()时列名无效,sql-server,asp.net-mvc,entity-framework,entity-framework-6,ef-database-first,Sql Server,Asp.net Mvc,Entity Framework,Entity Framework 6,Ef Database First,这里是交易,我改变了我的数据库模式,改变了我的一个表的PK,并且删除了所有与旧PK相关的内容(另一个表中的FK引用) 但是,当我使用savechanges()方法插入新实体时,会出现此异常 ex={“更新条目时出错。有关详细信息,请参阅内部异常。”} 内部的例外是 InnerException={“无效列名'Audit_ID'。”} 审核ID是旧PK 我试过这个 这个 这个 没有解决我的问题,所以我删除了我的整个edmx,并创建了一个新的,它也没有工作 ps:我使用的是数据库优先方法从ef模型

这里是交易,我改变了我的数据库模式,改变了我的一个表的PK,并且删除了所有与旧PK相关的内容(另一个表中的FK引用)

但是,当我使用savechanges()方法插入新实体时,会出现此异常

ex={“更新条目时出错。有关详细信息,请参阅内部异常。”}

内部的例外是

InnerException={“无效列名'Audit_ID'。”}

审核ID是旧PK

我试过这个

这个

这个

没有解决我的问题,所以我删除了我的整个edmx,并创建了一个新的,它也没有工作


ps:我使用的是数据库优先方法

从ef模型中删除/删除表(确保通过查看模型浏览器视图将其删除)

重建解决方案

确保您的表已保存。检查连接字符串,确保引用的数据库正确

通过更新模型工具再次添加表格


编辑:更好地阅读问题

创建自己的ModelKeyBuilder类

class MyOwnModelKeyBuilder
{

    public static void BuildCompositeKeys(DbModelBuilder modelBuilder)
    {
       modelBuilder.Entity<YourEntity>()
       .Ignore(x=>x.Audit_ID)
       .HasKey(x=>x.NewPrimaryKey);
    }
}

这可能不是一个简单的解决方案,因为我不知道表的结构,但它可能会对您有所帮助。

没有一个解决方案有效,因为问题实际上在SQL server数据库中

我运行了SQL Profiler并执行了程序insert语句,我发现错误出现在表的一个触发器中,该触发器具有以前的列名,将其更改为新的PK,并最终成功


因此,如果有人遇到类似问题,文章中的上述链接可能会有所帮助,或者您应该检查问题是否确实发生在数据库服务器上。

在5月份的案例中,我们发现在上下文中定义数据库元素修复了此问题

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");
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
HasDefaultSchema(“数据库_模式”);
modelBuilder.Entity().ToTable(“数据库中的表”).HasKey(ats=>ats.id);
modelBuilder.Entity().Property(ats=>ats.user\u name).HasColumnName(“user\u name”);
}

您需要以这种方式定义每个模式、表和字段。。。但之后您将拥有对代码的绝对控制权。祝你好运

您能否同时显示
savechanges()
ef查询
?通常,删除旧PK和添加新PK需要先对DB进行模型更新。如果已删除旧
Audit\u ID
PK的所有FK引用,则可以在模型类内设置
KeyAttribute
为数据库集分配新的PK。这是不太可能的。ef上还有外键连接吗?它是如何让事情变得更糟的?当重新添加表时,它没有添加到dbcontext中。我手动将表添加到dbcontext中,但整个解决方案都给了我一个错误天哪,我欠你一杯啤酒。我花了将近12个工作小时试图找到这个问题。原来是前一位开发人员为表编写了触发器。你带我去了那里,我真的很感激。荣誉
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");
}