【问题标题】:Setting new Entity Object for Update in C#, overiting the old object在 C# 中为更新设置新实体对象,覆盖旧对象
【发布时间】:2011-11-30 04:04:55
【问题描述】:

我对 Linq 和 C# 还很陌生,并且有一个问题给我带来了很多问题。

我有一些 XML 映射到 Linq 实体。我要做的是将原始记录加载到数据库中,然后根据 XML 实体对象更新该记录。

例子

Car objXml = getXml();

var dc = new carsdatacontext();

var curr = dc.car.firstordefault(c => c.id == "22");

objXml.id = 22;

dc.car = objXml;

dc.submitchanges();

基本上,我只想用我的 XML 对象中的数据覆盖我的数据库中的所有数据,但我不断收到如下错误。

如何使用新对象更新数据库,我是否必须复制它而不是设置它?

如果实体声明了版本成员或没有更新检查策略,则只能将其作为修改后的没有原始状态的实体附加。

【问题讨论】:

  • dc.car 不是整表,你只想更新一条记录?
  • dc.car 是一个表,是的,我只想更新一条记录。 objXml.id 只是我从原始 DB 对象 ID 分配给 XML 对象的主键。 ObjXml 和 dc.carr 都是相同的实体,只是具有不同的数据。 dc.car 来自数据库,objXml 是我想要覆盖 dc.car 然后更新记录的内容。所以 -- dc.car = objXML(是相同的类型,只是数据不同)
  • 如果你想改变当前记录,那么你应该尝试像 curr = objXml;但我认为这行不通,您必须从 ObjXml 中一一更新当前记录数据。
  • 不确定您的意思?将其附加到新上下文?
  • no curr is you car object from the database right, and objXml is your object from xml,现在你希望你的数据库对象具有与objXml对象相同的数据来实现这一点我想你会有设置每一个属性,例如 curr.Manufacturer = objXml.Manufacturer 如果你准备好了,只需调用 dc.submitchanges();

标签: c# linq-to-sql


【解决方案1】:

我希望这个例子能帮助你理解如何更新一行。

MSDN example

【讨论】:

  • 我知道如何更新一行。那不是问题。问题是用具有相同主键的新对象替换原始对象并运行更新。这就是我想做的。似乎它应该是直截了当的。挑选 30 个字段不是我想做的事情,这只是我必须制作的众多上下文之一。因此,找到一个解决方案(似乎应该是一个简单的解决方案)势在必行。
  • 那么也许您可以尝试分离旧的并附加新的然后提交更改。我个人从未这样做过,但似乎这对你来说是一个解决方案。
猜你喜欢
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多