c# - 在 WPF 中使用 Linq 的正确方法

标签 c# wpf linq-to-sql

我正在寻找有关将 Linq to Sql 与 WPF 一起使用的正确方法的好指南。

大多数指南只涉及最基本的知识,例如如何显示数据库中的数据,但我发现没有人涉及如何将数据存回数据库。你能回答或给我指出可以回答这些问题的指南吗?

我有一个单独的数据项目,因为相同的数据也将在网页中使用,所以我有存储库方法。这意味着我有一个使用 DataContext 的单独类,并且有像 GetAllCompanies() 和 GetCompanyById (int id) 这样的方法。

1) 在有集合的地方,最好返回一个 IQueryable 还是应该返回一个列表?

在 WPF 项目中,我看到了将集合包装在 ObservabgleCollection 中的建议。

2) 为什么我应该使用 ObservableCollection,即使是 Linq/IQueryable 我也应该使用它

linq 实体的某些属性应该可以在应用程序中编辑,因此我将它们设置为双向模式。这将更改 observableCollection 中的对象。

3) ObservableCollection 中的对象是否仍然是原始 linq 实体的实例,数据库中反射(reflect)的更改也是如此(调用 submitchanges 时)

我应该在存储库中有某种保存方法。但是我应该什么时候调用它呢?如果有人编辑了一个字段但决定不保存它,转到另一个对象并编辑它然后按保存,会发生什么情况。原来改的不也省了吗?它什么时候不再记得对 linq 实体对象的更改。我是否应该在每个方法中实例化 Datacontext 类,以便在完成时失去作用域。

4) 何时以及如何调用 SubmitChanges 方法

5) 我应该将 DataContext 作为存储库类的成员变量还是方法变量

要添加新行,我应该在事件中创建一个新对象("new"按钮推送),然后使用 repo 方法将其添加到数据库中。

6) 当我将对象添加到数据库时,ObservableCollection 中将没有新对象。我会以某种方式刷新吗?

7) 我不想在创建新对象时重复使用编辑窗口,但不确定如何从引用 ListView 中的所选项目动态更改为这个新对象。您可以指出任何示例。

最佳答案

很多问题!我会回答一些。

1) 只要您希望对其执行 LINQ 查询,请使用 IQueryable。使用“var”关键字而不是指定类型也是首选。

2) ObservableCollection 在集合中的项数发生变化时提供通知机制。这样,列表控件可以在集合更改时自行刷新。

注意:您仍然需要实现 INotifyPropertyChanged 接口(interface)来通知集合中各个对象的属性更改。

3) 我建议不要将 LINQ 实体直接存储到集合中。原因是,如果您想将更改传播回数据库,则必须保持创建该实体的 DataContext 打开。这使连接保持打开状态,不建议这样做。

4) 每当您想在数据库中进行更改时,创建一个新的 DataContext,选择您要更改的对象,更改它们的属性并调用 SubmitChanges() 方法。之后关闭 DataContext。

5) 如我所说,每当您想要从数据库中选择对象或将更改提交回数据库时,都创建一个新的 DataContext 实例。

关于c# - 在 WPF 中使用 Linq 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045391/

相关文章:

linq-to-sql - 通过linq to sql删除多对多关系的正确方法?

c# - 跨多个线程的 Linq-to-SQL DataContext

c# - System.DateTime 客户端依赖吗?

c# - 在 WPF 的只读文本框中启用复制粘贴功能

wpf - 有没有一种方法可以强制WrapPanel在WPF中插入 "newline"?

c# - 如何在不影响数据源的情况下交换 WPF 中已过滤数据网格中的行?

c# - 是否可以将 SqlGeography 与 Linq to Sql 一起使用?

c# - 在 C# 中附加字符串与 char 之间是否有任何惩罚

c# - 将参数从 aspx 传递到 javascript 问题

C# 单链表求和方法