使用POCO实体框架4时丢失DataAnnotations

Joh*_*ibb 2 poco entity-framework-4 data-annotations entity-framework-4.1 asp.net-mvc-3

我正在使用新的EntityFramework 4.1和POCO对象,以及DataAnnotation框架.

当EntityFramework需要创建代理类(例如,延迟加载虚拟属性)时,我的所有数据注释都将丢失.有没有办法让我的ModelMetaData可以来自代理的类,而不是代理类?

我知道我可以选择禁用代理创建(context.Configuration.ProxyCreationEnabled),但这似乎是一个糟糕的答案.我想,这应该是已经解决的问题.

这是一些示例代码:

public class Person
{
    [Required, Display(Name = "Display That Name")]
    public string DisplayName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在视图中的模型元数据中,类型为:Person_9C92B92D56F6F4F0FB1686526D585438A05323CC72E457C2152796E8866297E1 (FullName = "System.Data.Entity.DynamicProxies.Person_9C92B92D56F6F4F0FB1686526D585438A05323CC72E457C2152796E8866297E1"}),我的元数据消失了,显示名称在"DisplayName"处呈现,而不是"显示该名称".

有什么建议?

Rom*_*ias 6

您可以创建模型类的元数据版本.我们这样做...... EF产生的东西永远不会被手触摸.

假设你有一个Person类:

public partial class Person
{
        public int idPerson { get; set; }
        public int idTenant { get; set; }
        public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以创建元数据类,它保存元数据并且不会被覆盖:

[MetadataType(typeof(PersonMD))]
    public partial class Person
    {
       //leave it empty
    }

    public partial class PersonMD
    {
       [Required]
       public int idPerson { get; set; }

       [Required]
       public int idTenant { get; set; }

       [Required, Display(Name = "Display That Name")]
       public string Name { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)