【问题标题】:update object created in another datacontext更新在另一个数据上下文中创建的对象
【发布时间】:2011-05-22 10:30:57
【问题描述】:

我非常需要你的帮助。我想更新在另一个数据上下文中创建的对象; 这是我的代码。插入语句运行良好,但我无法编写更新代码

var dataContext = new ReconNewDataContext();           
        if (Id == 0)
        {
            var item = this;
            dataContext.RequestIO.InsertOnSubmit(item);
            dataContext.SubmitChanges();
            Id = item.Id;
        }
        else
        {
            var item = this;
            //update object
        }        

我读过 Linq2SQL: Update object not created in datacontext

我尝试使用 .Attach(this) .Attach(this,true) .Attach(this, oldObjectFromBase) 但总是出错。

我知道我可以从数据库中获取对象并从修改后的对象中手动传输数据,但是会有新字段。这意味着我必须始终在 Save() 方法中附加这些新字段。

是否有任何“漂亮”的方法来更新在另一个数据上下文中创建的对象?

【问题讨论】:

  • 我刚刚发布了一个类似的问题,因为我已经看到这个问题被问了至少 20 次,并且没有一个“正确”的答案。我还没有找到“漂亮”的方法。这让我们 a) 开始有点疯狂 b) 开始质疑在我的存储库中使用 Linq To Sql 是否明智。 EF 在更新断开连接的数据方面是否更好?我可以在我的存储库中使用更好的方法吗?我希望我有一个答案给你,但我自己还在寻找一个。 :(
  • 我问自己同样的问题...Nhibernate 会让我的生活更轻松...

标签: c# linq linq-to-sql datacontext


【解决方案1】:

查看这篇文章:http://omaralzabir.com/linq_to_sql__how_to_attach_object_to_a_different_data_context/

另外,在您的示例中,对于更新,请尝试这样做:

var item = new ObjectBeingUpdated();
//copy over properties from old object to new object, make sure pk's match

//Attach this new object

我相信类似的东西对我的同事有用。

更新:查看这里以获取有关附加的更多信息:http://blogs.msdn.com/b/dinesh.kulkarni/archive/2007/10/08/attach-if-you-have-something-detached.aspx

【讨论】:

  • //将属性从旧对象复制到新对象,确保 pk 匹配正如我之前所说,它会起作用,但它不是“美丽”的方式。表中的 42 个字段怎么样?当然我可以使用 system.reflection。但是是否有任何“漂亮”的方法来更新在另一个数据上下文中创建的对象?
【解决方案2】:

您可以使用以下模式:

  1. 从存储库中获取现有对象
  2. 使用AutoMapper 复制属性
  3. 保存您的对象。

【讨论】:

  • 这就是我所做的...但是当保存 xelements 或任何映射到 xml 字段的数据时,您会发现这不起作用...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2019-03-13
相关资源
最近更新 更多