sql - MVVM 和 Entity Framework - 什么引发事件?

标签 sql entity-framework mvvm poco

我最近一直在研究数据库解决方案并遇到了 Entity Framework 。我使用 Code First 来生成表格,但在尝试正确构建代码布局时,我遇到了设计问题。

我倾向于遵循的一般 MVVM 设计是 Model 和 ViewModel 都继承 INotifyProperty,因此 ViewModel 可以在它们绑定(bind)到的模型中发生任何更改时进行监听。

但是,对于 SQL 数据库和 EntityFramework。我的模型本质上都继承了 DbContext 并且是 POCO 对象。

因此,如果模型不再具有引发事件的方式,那么 View 模型就不能再监听这些变化。当 ViewModelA 对模型(sql 数据库)中的项目进行更改时会发生什么。 ViewModelB 如何知道它已更改,以便可以相应更新?

先感谢您。

最佳答案

首先,您的“普通旧 CLR 对象”(POCO)不应该从 DbContext 继承。 .相反,使用 Entity Framework (代码优先),您的应用程序通常会有一个继承自 DbContext 的类。 .这个类一般会包含几个DbSet属性,它们是您的 POCO 的集合。

其次,即使您的 POCO 确实继承自某个基类,也没有理由不能实现 INotifyPropertyChanged。 . C# 不支持多重继承,但它允许类实现接口(interface),即使它也继承自基类。事实上,一个类可以从多个接口(interface)继承,也可以从一个基类继承。

考虑到这两点,您的 POCO 没有理由无法实现 INotifyPropertyChanged .这是否真的是最好的架构是另一个问题,老实说,答案是一个很大的“取决于”。

我个人不使用INotifyPropertyChanged在 POCO 上。相反,我通常在我的 View 模型中有响应用户操作的命令(例如单击提交按钮)。这些命令通常只是直接在同一个 View 模型上更改某些内容,但如果它们导致模型发生更改,它们将直接更改实体上的某些数据或委托(delegate)给处理此类事情的类(取决于应用)。如果命令确实导致数据库发生更改并且其他 View 模型需要了解这一点,我使用信使(这是大多数 MVVM 框架的基本功能)发布一条消息,指示某些内容已更改(加上其他有用的数据,如果必要的),并让其他 View 模型注册消息并做出相应的响应。

关于sql - MVVM 和 Entity Framework - 什么引发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36343959/

相关文章:

c# - MVVM 基础 View 模型类

c# - 同步多个 View 、编辑器和提交/取消

c# - 当字段具有 NULL 值时,SQL WHERE 子句不返回行

SQL查询按附近时间戳分组

entity-framework - 如何将继承鉴别器映射为 Entity Framework 中的组合键?

php - 跟踪 Doctrine 实体上的字段变化

sql - Postgresql 插入如果不存在

mysql - 如何在 2 个表上进行连接,但只返回一个表的数据?

entity-framework - 更新向导没有响应

wpf - 将标题复选框绑定(bind)到用户控件的数据上下文的更好方法是什么?