【发布时间】:2018-10-16 14:48:38
【问题描述】:
这是我的问题...
我有一个实体类,我想保留该表中的历史值。每次更改每条记录时,我都想将此记录中的快照插入另一个表(具有相同的字段)。我可以逐个字段地执行此操作,但我确信应该有一种简单的方法来执行此操作。
我尝试过类似的方法,但它不起作用:
var t1 = context.TABLE1.Find(id);
var t2 = new TABLE2();
context.Entry(t2).CurrentValues.SetValues(t1);
context.SaveChanges();
我找到了这个How to "transfer" the data from one table to another with EF?,但它对我不起作用,因为我的桌子无法做到这篇文章中所说的
t2.CurrentValues.SetValues(t1);
有什么想法吗?
【问题讨论】:
-
您的代码有任何错误或可观察到的行为吗?
new TABLE2();是拼写错误吗? -
当我运行此代码时,我遇到了这个异常:“不能为类型为 'TABLE2' 的实体调用成员 'CurrentValues',因为该实体在上下文中不存在。要添加实体到上下文调用 DbSet
的 Add 或 Attach 方法。”这是因为我还没有数据库上的历史记录(表名不是真实的) -
那么您必须将 TABLE2 添加到上下文中,即将其声明为实体类型。
class MyContext : DbContext { DbSet<Table1> T1 {get; set;} DbSet<Table2> T2 {get; set;}},和/或致电T2.Add(t2); -
抱歉,TABLE2 存在于上下文中。 t2 是不是还没有退出,因为我希望它为它创造价值。
标签: c# .net entity-framework linq linq-to-entities