gpt4 book ai didi

wpf - MVVM 和 Entity Framework 中 POCO 类的含义

转载 作者:行者123 更新时间:2023-12-03 10:35:46 24 4
gpt4 key购买 nike

我试图了解 WPF 绑定(bind)如何与 MVVM 和 Entity Framework 结合使用。到目前为止,我将数据绑定(bind)理解为与属性相关的概念。但是,当涉及到 EF 时,我无法理解使用哪些对象来定义数据库模型。例如,我有一个类别的模型类:

 public class Category : INotifyPropertyChanged
{
string _CategoryId;
public string CategoryId
{
get
{
return _CategoryId;
}
set
{
if (_CategoryId != value)
{
_CategoryId = value;
RaisePropertyChanged("CategoryId");
}
}
}

string _CategoryName;
public string CategoryName
{
get
{
return _CategoryName;
}
set
{
if (_CategoryName != value)
{
_CategoryName = value;
RaisePropertyChanged("CategoryName");
}
}
}


/// <summary>
///
/// </summary>
/// <param name="prop"></param>
void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
}
public event PropertyChangedEventHandler PropertyChanged;

}

和 POCO 版本:
public class CategoryPoco
{
public CategoryPoco() { }

public int CategoryId { get; set; }
public string CategoryName { get; set; }
}

我理解的非 Poco 类的属性可以用于数据绑定(bind)。但是,我还需要构建数据库上下文模型:
public DbSet<Category> Categories { get; set; }

现在这是我失去理解的地方,在构建上下文模型时我是使用 Poco 类还是非 Poco 类?

当我开始与数据库交换数据时,如何匹配这两个类?

最佳答案

您使用“POCO 版本”为您的数据库构建上下文模型。 如果你愿意,POCO 被定义为

Plain Old CLR Object. Just a normal class, no attributes describing infrastructure concerns or other responsibilities that your domain objects shouldn't have.



所以从技术上讲,你的 Category也被视为 POCO。与 MVVM 或 EF 一起使用时,POCO 没有不同的含义。 EF 只是使用这些对象将其映射回数据库。

在您的 Category类,我通常不会为了拥有它而创建另一个模型类 INotifyPropertyChanged .您的 Category 更加灵活和清晰类应该被称为 CategoryViewModel .

如果我阅读您的代码并看到 INotifyPropertyChanged接口(interface) WPF 也将它用于 DataBinding,那么我会反对它,因为您现在使用的是 Model -> View 模式,而没有 ViewModel 作为中间人。 (假设您使用类别作为绑定(bind)源)

如果您决定需要延长 Category类,那么我建议使用 T4 模板将您的 POCO 类生成为部分类,并创建另一个实现 INotifyPropertyChanged 的部分类或添加更多不在给定表列中的属性,例如 CategoryStatus、CategoryDe​​scription 并用 标记这些属性[未映射] 属性。

这样您就不必在这两个类之间进行匹配,而且主要是您的 Model已在 ViewModel 中设置与 EF 进行通信。您还可以灵活地为对象添加更多功能,这符合 Open-Closed设计原则。

关于wpf - MVVM 和 Entity Framework 中 POCO 类的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com