asp.net-mvc-3 - 使用 POCO Entity Framework 4 时丢失 DataAnnotations

标签 asp.net-mvc-3 entity-framework-4 entity-framework-4.1 data-annotations poco

我将新的 EntityFramework 4.1 与 POCO 对象结合使用,并与 DataAnnotation 框架结合使用。

当EntityFramework需要创建一个代理类(比如懒加载虚拟属性)的时候,我所有的数据注解都丢失了。有什么方法可以让我的 ModelMetaData 来自被代理的类,而不是代理类?

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

下面是一些示例代码:

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

And then in my model metadata in the view, the type is: Person_9C92B92D56F6F4F0FB1686526D585438A05323CC72E457C2152796E8866297E1 (FullName = "System.Data.Entity.DynamicProxies.Person_9C92B92D56F6F4F0FB1686526D585438A05323CC72E457C2152796E8866297E1"}), my metadata is gone, and the displayname在“DisplayName”而不是“Display That Name”处呈现。

有什么建议吗?

最佳答案

您可以制作模型类的元数据版本。 我们这样做...... EF 生成的东西从来没有用手触摸过。

假设你有一个 Person 类:

public partial class Person
{
        public int idPerson { get; set; }
        public int idTenant { get; set; }
        public string Name { get; set; }
}

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

[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; }
    }

关于asp.net-mvc-3 - 使用 POCO Entity Framework 4 时丢失 DataAnnotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8125629/

相关文章:

asp.net-mvc-3 - 如何将一个属性的值包含在另一个属性的验证错误消息中?

asp.net-mvc-3 - 无法更新类型的模型 mvc

asp.net-mvc-3 - 用于直接文本输出的 MVC 3 Razor 语法?

entity-framework - Azure EF Code First 迁移初始化程序

c# - Entity Framework 4 部分 SaveChanges

entity-framework-4.1 - Entity Framework 4.0 中是否需要工作单元模式

asp.net-mvc - asp.net mvc 2 到 mvc 4

c# - Action 链接到子 Action

c# - 为什么我的结果类型为 List<IEnumerable<T>>

c# - Entity Framework Code First - 保存时如何忽略列