【问题标题】:Attach newly created element in LINQ for deleting在 LINQ 中附加新创建的元素以进行删除
【发布时间】:2012-10-26 13:23:57
【问题描述】:

我有一个与之连接的网格和数据集对象。 和使用 LINQ 的数据层。所以我需要从 LINQ 数据源中删除网格中删除的元素。

我有一个方法可以将我的 DataRow 项转换为 LINQ 项。例如:

DataRow forDelete = ...;
LinqItem itemForDelete = ConvertFromDataRow(forDelete);
dataContext.DeleteOnSubmit(itemForDelete);

此代码抛出异常,即无法删除未附加到表的项目。 但是如果我把它改成

DataRow forDelete = ...;
LinqItem itemForDelete = ConvertFromDataRow(forDelete);
dataContext.Attach(itemForDelete)
dataContext.DeleteOnSubmit(itemForDelete);

它会抛出无法附加已存在的项目的异常。

问题是在这种情况下如何正确附加物品。这应该可以解决问题。

【问题讨论】:

  • 您是否尝试过查找 LinqItem,然后将其删除...例如 var object = dataContext.xxx.Where(x => x.ItemId == itemForDelete.ItemId); 然后 dataContext.DeleteOnSubmit(object);
  • 是的,这种方法有效,但在目前的情况下我不能使用它。因为我有通用方法和很多遗留代码。所以我无法通过 Id 找到元素,因为 Linq 不知道我的元素有一个 ID 字段。而且我不能从具有该字段的项目中继承它,因为有大量遗留代码,这将很难维护,因为所有项目都是自动生成的并且具有一些不同的结构。
  • 另外,我尝试使用动态表达式解决它并在循环中搜索该元素,但这种方法的性能非常差。
  • 让您的数据库对象与您的实际数据库不同步似乎是个坏主意...您确实应该更新项目以实际反映该表包含的内容...
  • 你没有仔细阅读我的问题。

标签: c# .net linq linq-to-sql ado.net


【解决方案1】:

例外是因为您正在尝试删除未跟踪的项目。

在 DeleteOnSubmit 之前按 Id 查找。

更多信息:

http://msdn.microsoft.com/en-us/library/bb386982.aspx

How to delete in linq to sql?

【讨论】:

  • 我使用通用方法并且无法按 ID 选择项目,因为我的方法不知道该项目具有和 ID。而且由于遗留代码的数量很大,不可能为所有实体拥有通用的基本类。
【解决方案2】:

看起来这个问题没有正确答案,或者没有办法做我需要的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2016-12-24
    • 2018-09-06
    相关资源
    最近更新 更多