代码之家  ›  专栏  ›  技术社区  ›  Steve Chadbourne

如何让实体框架和MVVM很好地结合在一起?

  •  12
  • Steve Chadbourne  · 技术社区  · 15 年前

    我想同时使用ef和mvvm,并尝试看看它们是如何结合在一起的。我找不到太多的例子,所以希望你们能回答一些问题。

    假设我在一个名为customer的数据库中有一个表。我运行ef设计器并得到一个数据模型。

    下一步是运行一些LINQ以从数据模型中获取数据。让我们创建一个名为customerrepository的新类来完成这项工作。

    现在我猜这个模型会调用customerrepository.getCustomers来获取客户列表。

    这里是我的问题-customerModel有一个客户对象列表,这些对象是由数据模型中的ef定义的。如何向其添加验证属性或任何类型的验证?

    似乎EF和MVVM之间有点脱节。我敢肯定你们中的一些人以前也打过这个-有什么想法吗?有更好的方法来解决这个问题吗?

    干杯

    史蒂夫

    1 回复  |  直到 15 年前
        1
  •  4
  •   kiwipom    15 年前

    验证、业务规则和客户对象的表示应位于将用作视图的控制器或表示器的ViewModel中。

    关于如何创建该视图模型,您有几个选项:

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

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