MetadataType和DataAnnotations无法正常工作

时间:2012-11-24 03:59:10

标签: asp.net-mvc data-annotations poco metadatatype

我已经盯着这个很长一段时间了,看不出问题。

我使用EF4和POCO生成器生成了一些POCO类。

我正在尝试使用MetadataType属性来创建我可以在我的View(asp.net MVC)中使用的“伙伴”类,并利用数据注释。

所以,我有一个名为Contact的域名实体(POCO)。这是在命名空间BreakAwayEntities中名为BreakAwayEntities的项目中。

我在View的项目(WebUI)中创建了一个公共部分类。就是这样:

namespace BreakAwayEntities
{
    [MetadataType(typeof(ContactMetadataSource))]
    public partial class Contact
    {
        internal sealed class ContactMetadataSource
        {
            [HiddenInput(DisplayValue = false)]
            public int ContactID { get; set; }

            [Display(Name = "First Name")]
            public string FirstName { get; set; }

            [Display(Name = "Last Name")]
            public string LastName { get; set; }

            public string Title { get; set; }
        }        
    }
}

但是,我会收到以下错误消息:

  

错误10无法隐式转换类型   “System.Collections.Generic.List   [c:\ Program Files(x86)\ Reference   Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll]'到   “System.Collections.Generic.List   [c:\ Program Files(x86)\ Reference   Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll]'F:\ Code \ Sandpit \ GetAwayBreaks \ WebUI \ Controllers \ CustomerController.cs 29 38 WebUI

由于某种原因,接线不起作用。部分类的名称空间是相同的,但它们位于不同的项目中。那应该没关系?在View中使用的Contact类不会显示单个属性。它应该暴露POCO的所有属性,由MetadataType增强。

如果我错过了一个集会,我没有得到任何暗示。

我错过了什么?我需要在Global.asax中注册一些东西吗?感谢

1 个答案:

答案 0 :(得分:5)

部分类只能存在于一个项目中。

http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.100).aspx

更具体地说,

  

所有部分类型定义必须是相同类型的部分   在同一个程序集和相同的模块中定义(.exe或.dll   文件)。部分定义不能跨越多个模块。