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类来添加验证逻辑。不要修改自动生成的类