ASP.NET MVC POCO类和验证

时间:2011-01-06 20:31:24

标签: asp.net-mvc entity-framework poco

我有三个项目/图书馆。

SiteService(WCF服务)
SiteModel(POCO对象)
SiteMVC(Web应用程序)

在我的SiteModel库中,我只有POCO对象。这些对象是由t4模板生成的,所以我不想改变任何东西。 SiteService使用这些POCO对象并将它们序列化(这就是使用POCO对象而不是EF设计器生成的类的原因)

在WebApplication中,我想对这些POCO对象使用验证。我希望尽可能保持模型库的清洁,不要在它们上使用DataAnnotations,因为不同的应用程序中的规则可能会有所不同。

ASP.NET MVC2中验证的最佳方法是什么?是否可以使用DataAnnotations(伙伴类)?

2 个答案:

答案 0 :(得分:3)

如果您的T4模板生成了部分类,那么您很幸运。

您可以创建单独的部分定义并使用MetadataType

进行装饰
// T4 Generated Code
public partial class Item
{
    public int Id { get; set; }
    public string Name { get; set; }        
}

// Your partial in a separate file
[MetadataType(typeof(ItemValidation))]
public partial class Item
{
}

// Any DataAnnotations go here
public partial class ItemValidation
{
    [Required(ErrorMessage = "You need to have a Name!")]
    public string Name { get; set; }
}

否则,您唯一的另一个选择是在Web项目中创建带有DataAnnotations的ViewModel,然后在您的模型(干净的POCO对象)和ViewModel之间进行映射。

答案 1 :(得分:0)

FYI。虽然部分班级有效。如果您正在使用RIA或WCF并希望显示该属性,则需要添加[DataMember]属性。

public partial class Employee
{       
    [DataMember]
    public string ComposedName
    {
        get
        {
            return String.Format("{0}, {1}", this.LastName, this.FirstName);
        }
        set
        { throw new NotImplementedException(); }
    }
}