我正在使用ASP.NET Web Forms
和Entity 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
直接应用到自动创建的实体中,但这使得使用元数据的整个想法变得毫无用处等。
我在这里想要做些什么工作?
答案 0 :(得分:2)
您的部分类必须位于相同的命名空间中才能使部分工作。
因此,在您的情况下,将名称空间设置为DataAccessLayer
metada可以位于不同的名称空间中。