如何让Entity Framework和MVVM一起玩得很好?

Ste*_*rne 12 entity-framework mvvm

我想同时使用EF和MVVM,并试图看看它们是如何组合在一起的.我不能在例子的方式中找到很多,所以希望你们能回答几个问题.

假设我在名为Customer的数据库中有一个表.我运行EF设计器并获得数据模型.

下一步是运行一些linq以从数据模型中获取数据.让我们创建一个名为CustomerRepository的新类来执行此操作.

现在我猜模型会调用CustomerRepository.GetCustomers来获取客户列表.

这是我的问题 - CustomerModel有一个由EF在数据模型中定义的客户对象列表.如何向其添加验证属性或任何类型的验证?

EF和MVVM之间似乎有点脱节.我相信你们中的一些人之前已经打过这个 - 任何想法?有没有更好的方法来接近这个?

干杯

史蒂夫

kiw*_*pom 4

验证、业务规则和 Customer 对象的表示应该存在于 ViewModel 中,ViewModel 将充当视图的控制器或表示者。

关于如何创建 ViewModel,您有以下几种选择:

  1. 将模型作为 VM 的属性包含在内,并将模型实例传递到 VM 的构造函数中。然后,您可以公开客户的属性,并将它们连接到底层模型的相应属性。
  2. 使用 T4 模板和 Reflection (或者最好是Introspection )生成 ViewModel来“读取”模型,并生成将直接映射到它的属性。

现在,您可以向 VM 添加自定义验证规则,这样当从视图发送适当的命令时,您就可以执行业务规则,并且如果合适,您可以使用 EF 的 API 更新模型,以将这些更改保留回数据库。 。

  • 有趣的。我一直认为特定于模型的验证(例如性别)应该在模型中,但更高级别的验证 - 涉及多个属性或其他对象的内容应该在视图模型中。我想做的主要事情之一是避免多次重新显示客户属性。它是在数据模型中自动为我定义的,因此必须在模型中再次执行此操作,然后在虚拟机中再次将其连接起来,似乎当数据库更改时我正在为自己工作。对此,内省看起来很有趣。 (2认同)