我一直在寻找一个直接的答案,但似乎找不到。
我正在尝试学习 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 的经验很少,但我想在这个级别上没有区别)。
对于上面的 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/