WPF中的实体框架POCO类和ViewModel

达米亚诺斯88

如何使用最有效的方法为WPF提供这些功能,而无需实现INotifyPropertyChanged和其他WPF东西来解决数百个POCO模型的问题

现在,我将EntityFramework与简单的POCO类和手工编写的ViewModels一起使用

我的架构如下所示:

  • 看法
  • 视图模型
  • 储存库模式
  • WCF存储库或数据库存储库
  • 商业逻辑
  • 实体框架
  • POCO模型类

我的想法是:

  1. 使用AutomapperPOCO映射ViewModels类,然后再手动创建这些ViewModels。
  2. 使用T4生成基础ViewModels作为POCO之前生成的包装,编写我自己的(或使用现有的解决方案)Instance resolver类以在EF中提供相同的功能(一个实例=数据库中的一条记录)

我很困惑,因为我不喜欢自己的解决方案,它现在还不稳定,但是Automapper在映射中使用了反射

该怎么办?您是否知道一些神奇的工具,真的是很棒的工具,可以做这些神奇的事情,并为我提供了添加和扩展ViewModel的灵活性?

Corradolab

我相信您会假设:

  1. 通常您在ViewModel内创建Model对象的副本
  2. 通常,您在ViewModel的每个对象内实现INotifyPropertyChanged

我相信这两个假设都是错误的。看下面的代码示例:

class Customer
{
  public int ID {get; set;}
  public string Name {get; set;}
}

class MyViewModel: INotifyPropertyChanged
{
  // Hook you repository (model) anyway you like (Singletons, Dependency Injection, etc)
  // For this sample I'm just crating a new one
  MyRepository repo = new MyRepository();

  public List<Customer> Customers 
  {
    get { return repo.Customers;}
  }

  public void ReadCustomers()
  {
    repo.ReadCustomers();
    InternalPropertyChanged("Customers");
  }

  public event PropertyChangedEventHandler PropertyChanged;
  protected void InternalPropertyChanged(string name)
  {
    if (PropertyChanged != null)
      PropertyChanged(this, new PropertyChangedEventArgs(name));
  }
}

class MyRepository
{
  private List<Customer> customers;
  public List<Customer> Customers
  {
    get { return customers; }
  }

  public void ReadCustomers()
  {
    // db is the Entity Framework Context
    // In the real word I would use a separate DAL object
    customers = db.Customers.ToList();
  }
}

客户是实体框架返回的列表。ViewModel属性“客户”是一个简单的传递属性,它指向Model属性。

在此示例中,我不在Customer内部使用INotifyPropertyChanged。我知道只有在用户调用ReadCustomers()时才能修改客户列表,因此在其中调用了PropertyChanged。

如果需要为Customer类触发PropertyChanged通知,则可以直接在Customer类上实现INotifyPropertyChanged。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MVVM和实体框架中POCO类的含义

来自分类Dev

实体框架类与POCO

来自分类Dev

实体框架POCO中的枚举

来自分类Dev

实体框架中的POCO是什么?

来自分类Dev

我是否需要在实体框架6中使用POCO类

来自分类Dev

DDD和实体框架类

来自分类Dev

具有Postgres数据库和适当大小写的C#POCO类(不使用实体框架)

来自分类Dev

在ViewModel中更改数据后,绑定到实体框架的WPF DataGrid不会更新

来自分类Dev

实体框架排除字段查询计数和POCO最佳方法

来自分类Dev

实体框架在类中嵌套类

来自分类Dev

如何在 C# 和 WPF 中的实体框架中创建数据库和表?

来自分类Dev

实体框架和可移植类库

来自分类Dev

实体框架ViewModel

来自分类Dev

类库中的实体框架 Null

来自分类Dev

无法访问类中的实体框架实体

来自分类Dev

Winform或WPF的实体框架?

来自分类Dev

实体框架4 / POCO-从哪里开始?

来自分类Dev

实体框架中的Skip()和Take()

来自分类Dev

在实体框架中按月和年搜索

来自分类Dev

实体框架基类

来自分类Dev

一起使用 WPF 和实体框架 - 什么架构?

来自分类Dev

具有RIA服务和实体框架设置的WPF

来自分类Dev

实体框架和 WPF 应用程序设计指南

来自分类Dev

ViewModel,CQRS和实体

来自分类Dev

如何使用实体框架刷新 WPF 中的数据网格

来自分类Dev

WPF MVVM中的ADO.NET实体框架?

来自分类Dev

实体框架:在WPF中创建和更新相关对象

来自分类Dev

使用UserControl和ViewModel的WPF中的BusyIndicator

来自分类Dev

实体框架和IEnumerable