【问题标题】:How does EF work in WPF/Silverlight apps?EF 如何在 WPF/Silverlight 应用程序中工作?
【发布时间】:2012-01-23 14:40:04
【问题描述】:

一段时间以来,我一直在尝试同时围绕 2 个概念,学习 MVVM(其中一件困难的事情是试图弄清楚要使用哪个框架。我们甚至不知道那里有多少直到几周前),而且我正在尝试学习 Entity Framework 4.2。

这是针对我们将要编写的 WPF 应用程序。

我已经获得了 Julia Lerman 的书,并且我还在参加关于 EF 的在线培训课程,但我仍然没有得到并且还没有看到任何示例的一件事是如何处理类似的事情通过 EF 创建的类的 INotifyPropertyChanged 接口,无论我们是否使用 MVVM,使用 INotifyPropertyChanged 都是至关重要的。

所以,让我在这里问一个简单的问题:

您是否允许 EF 创建反映数据库中所有数据的所有数据访问类,然后复制大部分代码以便我可以让它与 INotifyPropertyChanged 一起使用?还是有其他方法可以做到这一点?

【问题讨论】:

    标签: wpf entity-framework-4.1 inotifypropertychanged


    【解决方案1】:

    当我想到我必须将每个数据对象映射到一个仅在其之上实现 INPC 的新对象时,我感到很困惑。

    然后我发现了一个技巧:假设你要使用 WCF,它会自动实现 INPC。
    对于集合,只需进入 Service Reference 配置,并将其设置为将 ObservableCollection 作为默认集合类型。

    就是这样,你已经为 MVVM 设置好了 =)

    【讨论】:

    • 什么? WCF 实现 INotifyPropertyChanged 接口?你在开玩笑吧?我不知道。这是否取决于您返回的数据类型?例如,我在几年前(我认为是 2008 年或更早)编写了所有 WCF 服务,那时我当然不知道 INPC。我所有的 WCF 类都返回强类型数据集。我假设那些没有实施 INPC,我对此是否正确?
    • 去你的客户端检查你的类型。当您看到每个人的“PropertyChanged”事件时,请睁大眼睛。 =p
    【解决方案2】:

    因为ViewModel 是根据View 的需求创建的,所以只有在非常简单的情况下ViewModel 和您的Entity 是同一类。通常你有一个Entity 类和一个ViewModel 类。
    INotifyPropertyChanged 只是造成这种情况的原因之一。还有其他的,例如转换、验证、有意义的错误消息、聚合等。

    【讨论】:

      【解决方案3】:

      我以前在我的几个 WPF 应用程序中使用过实体框架。我第一次使用 EF 数据库。完全按照我想要的方式获得模型是非常棘手的,一旦它开始工作,我就必须通过并在我的实体类上实现 INotifyPropertyChanged。

      最近,我开始使用 EntityFramework CodeFirst 和 4.1,我发现处理所有属性更改的东西要容易得多。我通常创建一个基类并在其上实现 INotifyPropertyChanged 并从中继承我的实体。

      就 ViewModel 而言,我也开始担心这个框架或那个框架。后来我决定自己动手。当然,这些框架有一些有趣的功能,但为了学习,我发现通过创建自己的 ViewModelBase 类并从中继承我所有的 ViewModel 更容易进入。

      ViewModelBase 通常实现 INotifyPropertyChanged。后来我创建了一个 ViewModel 监视器类,它有一个 ViewModel 的集合。为了查找它们,我为 ViewModelBase 提供了一个 FriendlyName 属性,以便为每种继承的 ViewModel 设置一个名称(我的类型通常是 RecordMaintenanceViewModel、NavigationViewModel、ShellViewModel 等),我通常会从那些。所以在我的运输程序中的 ShipmentView 上,ShipmentViewModel 继承自 CollectionViewModel,而 CollectionViewModel 继承自 ViewModelBase。通过这种方式,我将功能划分为谨慎的部分,让我能够处理特定的场景。

      我通常将我的 ViewModel 基础移植到每个项目中,并且经常使用我的中间 ViewModel;有时我不得不重新创建它们。

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 1970-01-01
        • 2011-03-13
        • 2014-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多