C# 验证实体框架模型类

C# 验证实体框架模型类,c#,wpf,entity-framework,mvvm,C#,Wpf,Entity Framework,Mvvm,我有一个模型Supplier,它是由EntityFramework数据库优先方法生成的。我将其包装在我的ViewModelSupplierViewModel中,这使它能够通过WPF用户界面轻松显示和编辑。这是我的模型: public partial class Supplier:IDataErrorInfo { public Supplier() { this.TblPurchases = new HashSet<TblPurchase>();

我有一个模型
Supplier
,它是由
EntityFramework
数据库优先方法生成的。我将其包装在我的
ViewModel
SupplierViewModel
中,这使它能够通过WPF用户界面轻松显示和编辑。这是我的模型:

public partial class Supplier:IDataErrorInfo
{
    public Supplier()
    {
        this.TblPurchases = new HashSet<TblPurchase>();
        this.TblPurchaseOrders = new HashSet<TblPurchaseOrder>();
        this.TblSupplierAddresses = new HashSet<TblSupplierAddress>();
    }

    public int SupplierId { get; set; }
    public string SupplierName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
    public string ZipCode { get; set; }

    public virtual ICollection<TblPurchase> TblPurchases { get; set; }
    public virtual ICollection<TblPurchaseOrder> TblPurchaseOrders { get; set; }
    public virtual TblUser TblUser { get; set; }
    public virtual ICollection<TblSupplierAddress> TblSupplierAddresses { get; set; }
    public virtual TblCompany TblCompany { get; set; }

    #region IDataErrorInfo members

    //Validation logic put here

    #endregion 

}
公共部分类供应商:IDataErrorInfo
{
公共供应商()
{
this.TblPurchases=new HashSet();
this.TblPurchaseOrders=new HashSet();
this.TblSupplierAddresses=new HashSet();
}
public int SupplierId{get;set;}
公共字符串供应商名称{get;set;}
公共字符串地址1{get;set;}
公共字符串地址2{get;set;}
公共字符串City{get;set;}
公共字符串状态{get;set;}
公共字符串国家{get;set;}
公共字符串ZipCode{get;set;}
公共虚拟ICollection TBLPURCHAES{get;set;}
公共虚拟ICollection TblPurchaseOrders{get;set;}
公共虚拟TblUser TblUser{get;set;}
公共虚拟ICollection TblSupplierAddresses{get;set;}
公共虚拟TblCompany TblCompany{get;set;}
#区域IDataErrorInfo成员
//验证逻辑放在这里
#端区
}

我使用
IDataErrorInfo
将验证逻辑放在这个模型类中。我的问题是,当我使用
实体框架向导从数据库生成模型类时,我丢失了更改(
IDataErrorInfo
)。为什么我丢失了这些更改?那么我如何在这里验证我的模型类呢

更改丢失,因为自动生成向导正在从头开始重新创建这些类

解决此问题的最佳方法是在其他文件夹中创建另一个分部类。也许可以将文件夹称为IDataErrorInfoPartials或其他有意义的东西。然后像这样创建类:

public partial class Supplier:IDataErrorInfo
{   
     #region IDataErrorInfo members

     //Validation logic put here

    #endregion 
 }
然后,编译器将把它们组合成一个类

我认为您需要确保两个部分也占用相同的名称空间


当您首先使用数据库时,您的模型类是自动生成的类,这些类引用数据库的表。因此,当您从数据库生成模型类时,它将为表中的所有字段和关系创建属性。您的错误信息详细信息不在表中,因此当您生成新的错误信息时,它显然不在表中

您可以使用分部类或DTO类来添加验证逻辑。不要修改自动生成的类