所以这是交易,我更改了我的数据库架构,并更改了我的一个表的PK,并删除了与旧PK相关的所有内容(另一个表中的FK引用)。
但是当我使用savechanges()方法
插入新实体时,我有这个例外ex = {"更新条目时发生错误。有关详细信息,请参阅内部异常。"}
内部异常是
InnerException = {"无效的列名称' Audit_ID'。"}
Audit_ID是旧的PK。
我试过这个 "Invalid column name" when trying to insert data into database using SQL
这Invalid column name when trying to add an entity to a database using DbContext
这Invalid column name after mapping
并没有解决我的问题,因此当我删除整个edmx并创建一个新的edmx时,它也没有解决。
ps:我正在使用数据库第一种方法
答案 0 :(得分:5)
非解决方案有效,因为问题实际上是在SQL Server数据库中。
我运行了SQL事件探查器并执行了程序插入语句,我发现该错误位于表的触发器之一,该触发器具有Previous列名,将其更改为新PK并最终起作用。
因此,如果有人遇到类似的问题,帖子中的上述链接可能有所帮助,或者您应该检查问题是否实际发生在数据库服务器上。
答案 1 :(得分:0)
从ef模型中删除/删除表格(确保通过查看模型浏览器视图删除它)。
重建解决方案。
确保您的表已保存。检查连接字符串以及引用正确的数据库。
通过更新模型工具再次添加表格。
编辑:更好地阅读问题
答案 2 :(得分:0)
创建自己的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);
}
这可能不是一个直接的解决方案,因为我不知道表结构,但它可能对你有所帮助。
答案 3 :(得分:0)
在可能的情况下,我们发现在上下文中定义数据库元素可以解决该问题。
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");
}
您将需要以这种方式定义每个架构,表和字段...但是之后,您将对代码具有绝对的控制权。祝你好运!