我有一个模型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
将验证逻辑放在此模型类中。我的问题是当我使用Entity Framework wizard
从数据库生成模型类时,我丢失了更改(IDataErrorInfo
)。为什么我失去了变化?那我该如何在这里验证我的模型类?
答案 0 :(得分:1)
由于自动生成向导正在从头开始重新创建这些类,因此更改已丢失。
解决此问题的最佳方法是在其他文件夹中创建另一个部分类。也许调用文件夹IDataErrorInfoPartials或有意义的东西。然后像这样创建你的类:
public partial class Supplier:IDataErrorInfo
{
#region IDataErrorInfo members
//Validation logic put here
#endregion
}
然后编译器将这些组合成一个类。
我认为你需要确保两个部分也占据相同的命名空间。
答案 1 :(得分:0)
当您使用Database First时,您的模型类是自动生成的类,它们引用数据库的表。因此,当您从数据库生成模型类时,它将为表中的所有字段和关系创建属性。您的错误信息详细信息不是表的一部分,因此当您生成新的时,它显然不存在。
您可以使用部分类或DTO类来添加验证逻辑。不要修改自动生成的类。