【问题标题】:Entity framework. Insert values from one entity class to another different one实体框架。将值从一个实体类插入到另一个不同的实体类
【发布时间】: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


【解决方案1】:

您可以使用像AutoMapper 这样的包来创建 Table1 和 Table2 类之间的映射。他们有关于如何设置的很好的文档。您还可以重写 SaveChange() 方法来处理历史记录的创建/保存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多