wpf - 我是从 Entity Framework 模型创建模型还是编辑 Entity Framework 模型并在 MVVM 中使用它们?

标签 wpf entity-framework mvvm

我一直在寻找一个直接的答案,但似乎找不到。

我正在尝试学习 WPF 中的 MVVM 模式,并且一直想知道我的模型是否是 Entity Framework 创建的,或者我是否应该创建基本上是 Entity Framework 模型副本的模型。

例如,我非常基本的 tblMyEmployees 的 Entity Framework 模型如下

    public partial class tblMyEmployee
{
    public int pkEmployee { get; set; }
    public string strFirstName { get; set; }
    public string strLastName { get; set; }
}

那么我是否应该创建一个模型,基本上从 Entity Framework 生成的模型中复制和粘贴属性,并使用我的 BaseViewModel 实现 INotifyPropertyChanged,以及我发现有用的任何其他属性,比如这样
class EmployeeModel: BaseViewModel
{
    public int pkEmployee { get; set; }
    private string _strFirstName;
    public string strFirstName
    {
        get { return _strFirstName; }
        set
        {
            _strFirstName = value;
            SetProperty(ref _strFirstName, value);
        }
    }
    private string _strLastName;
    public string strLastName
    {
        get { return _strLastName; }
        set
        {
            _strLastName = value;
            SetProperty(ref _strLastName, value);
        }
    }
    private string _strFullName;
    public string strFullName
    {
        get { return strFirstName + " " + strLastName; }
    }
}

或者我应该添加我的其他属性并将 INotifyPropertyChanged 实现到生成的模型中吗?

这似乎是一个非常愚蠢的问题,但这是我想要一个明确的答案,因为很长一段时间我都无法找到答案。

生成模型顶部的注释让我想知道是否应该基于它创建自己的模型

//此代码是从模板生成的。

//手动更改此文件可能会导致您的应用程序出现意外行为。

//如果重新生成代码,将覆盖对此文件的手动更改。

最佳答案

正如 Mark Feldman 在此答案中提到的 https://stackoverflow.com/a/54856785/249665 ,有几种方法可以做到。

在大多数情况下, View 模型和域实体(模型)是不同的;它们只会在一个非常简单的 CRUD 应用程序中是相同的。

例如, View 模型可能包含模型中属性的子集,或来自多个模型的属性。

除此之外, View 模型具有模型中不存在的属性。例如,可能只允许某些用户查看或编辑特定属性;然后, View 模型将具有指示这些字段是隐藏的还是只读的属性。

此外, View 模型可能具有组合框列表等内容,并且这些值可能来自其他模型(值对象)。

这是我目前的方法(使用 NHibernate,不幸的是我对 EF 的经验很少,但我想在这个级别上没有区别)。

  • 域实体不应实现 INPC
  • 避免 View 模型内部过多的逻辑
  • 将用于加载 View 模型的代码分解为单独的类。
  • 分解代码以执行对单独类的更新。
  • 使用 FluentValidation 验证 3 和 4 的数据。

  • 对于上面的 3 和 4,看看 https://jimmybogard.com/vertical-slice-architecture/

    你最终可能会得到这样的类:
    * 员工模型
    * 创建新的员工 View 模型
    * 编辑薪水 View 模型
    * GetNewEmployee Query(这将获取创建新员工所需的所有数据,例如部门列表、职位等)
    * SaveNewEmployee 命令(保留新员工)
    * GetEmployee Salary Query(这个可能会检查用户是否可以查看但不能更改工资,可能会获取最低和最高工资,工资类型等)
    * 更新工资命令
    * 验证新员工
    * 验证薪水

    可能你会发现所有这些类都有一些共同的逻辑。有几种方法可以处理这个问题。通常可以将逻辑移至模型中的方法;在其他情况下,您需要添加实现此类通用逻辑的单独服务类。

    关于wpf - 我是从 Entity Framework 模型创建模型还是编辑 Entity Framework 模型并在 MVVM 中使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856416/

    相关文章:

    c# - WPF 在异步等待模式中使用 MVVM 和 WCF

    c# - MVVM 与对象的通信

    wpf - 如何将索引属性绑定(bind)到 WPF 中的控件

    c# - 来自数据库的数据未返回,但正常列表是

    c# - SQL,合并两个表进行查询

    wpf - WPFToolkit RichTextBox-键入时更新文本颜色

    c# - 从 MainPage.xaml.cs 文件获取字符串变量的值到 Windows Phone 中的 MainPage.xaml 文件

    wpf - 有没有办法观看 WPF 路由事件?

    c# - MySql Connector 6.8.2 RC、Entity Framework 6 和 Code First

    c# - RaiseCanExecuteChanged 在编译的 exe 中不起作用,但在调试时起作用