Entity framework 如何在实体框架实体上实现INotifyPropertyChanged

Entity framework 如何在实体框架实体上实现INotifyPropertyChanged,entity-framework,Entity Framework,我用标准模板生成了一个名为Account的EF 5实体 它具有属性AccountTypeId 当它更改时,我需要一个通知,以便可以更新另一个字段 这通常是如何做到的?这只需要一个属性,所以我不想使用修改过的模板 AccountTypeId绑定到WinForms中UI中的组合框,因此它并不像我通常在WPF中那样是一个MVVM应用程序。一种方法是转到EDMX并将字段重命名为AccountTypeId\u Internal(例如),然后在EDMX中将属性设置为Private。然后创建一个分部类 生成的

我用标准模板生成了一个名为Account的EF 5实体

它具有属性AccountTypeId

当它更改时,我需要一个通知,以便可以更新另一个字段

这通常是如何做到的?这只需要一个属性,所以我不想使用修改过的模板


AccountTypeId绑定到WinForms中UI中的组合框,因此它并不像我通常在WPF中那样是一个MVVM应用程序。

一种方法是转到EDMX并将字段重命名为AccountTypeId\u Internal(例如),然后在EDMX中将属性设置为
Private
。然后创建一个分部类

生成的Account.cs应如下所示:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace <yournamespace>
{
    using System;
    using System.Collections.Generic;

    public partial class Account
    {
        private int AccountTypeId_Internal  { get; set; }

        // other auto generated properties
    }
}

这样做的好处是,您已经编写的代码根本不需要更改。缺点是,如果从edmx中删除帐户并重新添加,则必须再次执行edmx步骤。

一种方法是转到edmx并将字段重命名为AccountTypeID\u Internal(例如),然后在edmx中将属性设置为
Private
。然后创建一个分部类

生成的Account.cs应如下所示:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace <yournamespace>
{
    using System;
    using System.Collections.Generic;

    public partial class Account
    {
        private int AccountTypeId_Internal  { get; set; }

        // other auto generated properties
    }
}

这样做的好处是,您已经编写的代码根本不需要更改。缺点是,如果从edmx中删除帐户并重新添加,则必须再次执行edmx步骤。

您可以使用名为。软件包文档位于上。请参阅我的代码项目提示”


我应该指出,该技术将为类中的每个属性实现INPC。如果您只希望INPC用于单个属性,而不希望修改T4模板或EDMX文件,那么您可以利用实体类使用“partial”关键字生成的事实,允许您添加“wrapper”属性在一个单独的(非生成的)文件中,如Erik Philips所述。您必须修改现有代码以引用包装器属性,但当您重新生成模型或实体时,不会出现任何问题

您可以使用一个名为。软件包文档位于上。请参阅我的代码项目提示”


我应该指出,该技术将为类中的每个属性实现INPC。如果您只希望INPC用于单个属性,而不希望修改T4模板或EDMX文件,那么您可以利用实体类使用“partial”关键字生成的事实,允许您添加“wrapper”属性在一个单独的(非生成的)文件中,如Erik Philips所述。您必须修改现有代码以引用包装器属性,但当您重新生成模型或实体时,不会出现任何问题

EF的哪个版本?实体是如何生成的?使用EF 5和标准模板。您可以修改T4模板以生成支持
IPropertyChanged
的属性,也可以为该实体创建自定义模板。EF的哪个版本?实体是如何生成的?使用EF 5和标准模板。您可以修改T4模板以生成支持
IPropertyChanged
的属性,也可以为该实体创建自定义模板。非常感谢!非常感谢!