【问题标题】:LINQ, Convert table to list and insert new recordLINQ,将表转换为列表并插入新记录
【发布时间】:2017-05-08 20:02:16
【问题描述】:

我有一个DataContext

public class DatabaseCatalogue : DataContext
{
    // other stuffs ...

    public Table<IngramProduct> IngramProducts;
}

我将IngramProducts 表加载到一个列表中:

private List<IngramProduct> ingramProducts =
        (from ingramProduct in dbCatalogue.IngramProducts
        select ingramProduct).ToList();

如果我更改此列表中某个对象的属性之一的值,然后调用dbCatalogue.SubmitChanges();,它将被保存到数据库中。

但是如果我创建一个新对象并将这个对象插入到列表中,它不会作为新记录保存到表中(当调用SubmitChanges 时)。

我的问题是:如何将新对象添加到列表中并将其作为新记录保存到数据库中(调用SubmitChanges 方法)?

【问题讨论】:

  • “如果我创建一个新对象并将这个对象插入到列表中,它不会作为新记录保存到表中” ...您是否添加它也进入Table,或者只是进入List?因为如果只在List中添加,Table怎么知道有新行要保存?

标签: c# linq


【解决方案1】:

如果你想在调用SubmitChanges()之后持久化这个对象,你必须将你的新产品添加到原来的Table

dbCatalogue.IngramProducts.InsertOnSubmit(myNewIngramProduct);

调用ToList 后,对数据库进行查询,集合在List 中实现,现在与原始Table 无关。

【讨论】:

  • 当时认为这可能是解决方案,但对我来说有点困惑(LINQ 的新手,所以我的问题可能看起来很愚蠢):为什么如果我更改列表中的一个对象,它将是保存到数据库记录中(因此列表看起来与表无关)但是当我将新对象添加到列表中时它不会保存到数据库中?像 List _list = ().ToList 这样的声明并不意味着 _list 是指向括号之间的“列表版本”的指针?
  • 单个对象由 Change Tracker 跟踪,在调用 SubmitChanges 时,对其成员的更改会反映到数据库中。当您调用ToList 时,collection(列表本身)只是查询的projection。此列表与原始上下文无关,只是单个对象的容器。
  • 更多信息请见documentation
  • 虽然我不完全理解,但提供的解决方案确实可以按预期工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 2019-11-10
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多