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

眼睛

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

 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类的属性可以用于数据绑定。但是,我还需要构建数据库上下文模型:

public DbSet<Category> Categories { get; set; }

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

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

123 456 789 0

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

普通的旧CLR对象。只是一个普通的类,没有描述基础架构问题或您的域对象不应该承担的其他责任的属性。

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

在您的Category班级中,我通常不会仅仅为了拥有那个而创建另一个Model类INotifyPropertyChanged更加灵活和明确地Category应该调用您的CategoryViewModel

如果我阅读了您的代码,并且看到了WPF还将其用于DataBindingINotifyPropertyChanged接口,那么我将不赞成它,因为您现在使用的是Model-> View模式,而没有将ViewModel作为中间人。 (假设您使用类别作为绑定源)

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

这样,您不必在两个类之间进行匹配,并且大多数情况下您Model已经在中ViewModel进行了设置,可以将其与EF通信。您还可以灵活地向对象添加更多功能,这符合Open-Closed设计原则。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF中的实体框架POCO类和ViewModel

来自分类Dev

实体框架类与POCO

来自分类Dev

实体框架POCO中的枚举

来自分类Dev

实体框架中的POCO是什么?

来自分类Dev

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

来自分类Dev

DDD和实体框架类

来自分类Dev

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

来自分类Dev

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

来自分类Dev

实体框架在类中嵌套类

来自分类Dev

实体框架和可移植类库

来自分类Dev

类库中的实体框架 Null

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

实体框架字段是必需的 (MVVM)

来自分类Dev

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

来自分类Dev

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

来自分类Dev

实体框架基类

来自分类Dev

使用实体框架时ASP.NET MVC中的Fluent API含义

来自分类Dev

DataTemplates和MVVM框架

来自分类Dev

实体框架和IEnumerable

来自分类Dev

实体框架和指导

来自分类Dev

PostgreSQL和实体框架

来自分类Dev

检索实体框架中类的数据库计算属性

来自分类Dev

使用实体框架在自己的类库中创建DAL

来自分类Dev

在自定义类中为实体框架实现IDisposable

来自分类Dev

实体框架中同一类的多个列表

来自分类Dev

如何从元数据类正确确定实体框架中的关系?

来自分类Dev

MVVM +服务+实体框架和依赖注入与服务定位器