将DataAnnotation伙伴类放在另​​一个程序集中

时间:2013-06-19 08:26:07

标签: c# asp.net .net asp.net-mvc data-annotations

我有一个名为模型的项目。我的所有实体都在 EF代码首先生成的项目中。

Public Partial Class Person
{
    ...
}

我不想触及生成的类,因此我可以创建部分类并为其添加MetadataType属性。

[MetadataType(typeof(Person_Metadata))]
public partial class Person
{
}

这是我的好友班

[Bind(Exclude="PersonID")]
public class Person_Metadata
{
    [Display(Name:="First name")]
    public string FirstName { get; set; }
    [Display(Name:="Last name")]
    public string LastName { get; set; }
}

问题是,我想将我的伙伴班级移到另一个议会

模型项目没有引用,因此[MetadataType(typeof(Person_Metadata))]会出错,因为它没有引用Person_Metadata类。

我可以使用 FluentValidation 作为验证部分(效果很好),但是其他元数据如:Display属性呢?

我还发现了这个问题:Adding DataAnnotation to class when using FluentValidation关于使用FluentValidation引擎管理MetaData,但这看起来还有很长的路要走,我更喜欢使用数据注释属性

2 个答案:

答案 0 :(得分:2)

  

问题是,我想将我的伙伴班级移到另一个议会。

那是不可能的。部分类仅在同一程序集的边界内工作。

  

我可以使用FluentValidation作为验证部分(并且效果很好),   但是其他元数据如:显示属性?

没什么,他们只能留在你的视图模型。不在你的域名模型上。您的视图模型是您专门设计的类,以满足您的视图要求。在那些视图模型上,您将使用[DisplayFormat]和类似的属性。

答案 1 :(得分:1)

我知道回复已太晚了,但有人可能会从中得到帮助。

我有类似的情况,现有的Model类/实体是在一个独立的程序集中创建的,也是在DotNet 3.5中。

我必须重新使用上面的程序集,但这次是在ASP.Net MVC 5.为此我发现模型汇编中的类,如果标记为public,可以在ASP.Net MVC项目中继承,那里我们可以为数据注释添加好友类。

它运作得很好......