验证实体框架模型类

时间:2014-06-20 09:36:46

标签: c# wpf entity-framework mvvm

我有一个模型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)。为什么我失去了变化?那我该如何在这里验证我的模型类?

2 个答案:

答案 0 :(得分:1)

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

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

public partial class Supplier:IDataErrorInfo
{   
     #region IDataErrorInfo members

     //Validation logic put here

    #endregion 
 }

然后编译器将这些组合成一个类。

我认为你需要确保两个部分也占据相同的命名空间。

Here is a link about partial classes.

答案 1 :(得分:0)

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

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