使用Linq和WPF的正确方法

时间:2010-06-15 13:07:23

标签: c# wpf linq-to-sql

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

大多数指南只涉及如何从数据库显示数据这样的基本知识,但我找不到如何保存回数据库。你能否回答或指出一个可以回答这些问题的指南。

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

1)哪里有收藏品最好作为IQueryable返回,还是应该返回一个清单?

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

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

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

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

我应该在存储库中有一些save方法。但什么时候应该打电话给它?如果某人编辑某个字段但决定不保存该字段,则转到另一个对象并对其进行编辑然后按保存会发生什么情况。原来的变化也不保存吗?什么时候不再记得对linq实体对象的更改。我应该在每个方法中实例化Datacontext类,以便在完成时丢失范围。

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

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

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

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

7)我不想在创建新的时重用编辑窗口但不确定如何动态更改从引用列表视图中的所选项到此新对象。你可以指出的任何例子。

1 个答案:

答案 0 :(得分:1)

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

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

2)只要集合中的项目数发生变化,ObservableCollection就会提供通知机制。这样,只要集合发生变化,列表控件就可以自行刷新。

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

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

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

5)正如我所说,只要你想从数据库中选择对象或者将更改提交回数据库,就创建一个新的DataContext实例。