不从部分类元数据应用数据注释验证

时间:2014-07-15 05:58:20

标签: entity-framework validation webforms data-annotations

我正在使用ASP.NET Web FormsEntity Framework 5方法开展Database first申请。我有一个单独的项目用于生成我的实体的数据访问层。在这个项目中,我有一个目录ModelPartials,我用它来应用我的Data Annotations。例如,我创建了Client实体:

namespace DataAccessLayer
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

public partial class Client
{
    public Client()
    {
        this.Accounts = new HashSet<Account>();
        this.ClientHistories = new HashSet<ClientHistory>();
    }

    public int ClientId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    //the class continues...

然后在我的ModelPartials文件夹中:

namespace DataAccessLayer.ModelPartials
{
[MetadataType(typeof(ClientMetaData))]
public partial class Client
{
}

public class ClientMetaData
{
    [StringLength(15, ErrorMessage = "Some error")]
    [Required(ErrorMessage = "Error")]
    public string FirstName { get; set; }

    [StringLength(15, ErrorMessage = "Some error")]
    [Required(ErrorMessage = "Error")]
    public string LastName { get; set; }
}
}

这就是问题所在。在我的aspx文件中,我必须将该类添加到ItemType。如果我尝试导航到ModelPartials中的部分类,如此:

ItemType="DataAccessLayer.ModelPartials.Client" 

我收到一个错误,该类不包含我使用的属性的定义。如果我将其更改为:

ItemType="DataAccessLayer.ModelPartials.ClientMetaData"

然后我的属性被识别,但在我的后端我的Update方法期待Client作为参数:

public void Update(Client client)
    {

        if (ModelState.IsValid)
        //more code...

我不认为我必须将其更改为ClientMetaData。我可以让它工作的唯一方法是将DataAnnotations直接应用到自动创建的实体中,但这使得使用元数据的整个想法变得毫无用处等。

我在这里想要做些什么工作?

1 个答案:

答案 0 :(得分:2)

您的部分类必须位于相同的命名空间中才能使部分工作。

因此,在您的情况下,将名称空间设置为DataAccessLayer

metada可以位于不同的名称空间中。