元数据属性未在Database-First Entity Framework中应用

时间:2016-09-07 12:00:25

标签: c# asp.net-mvc entity-framework-6

我花了两天时间在互联网上搜索我做错了什么。这里的每个教程和问题/答案都显示了相同的解决方案:

[MetadataType(typeof(PEOPLE_Metadata))]
public partial class PEOPLE { }

public class PEOPLE_Metadata
{
    [DisplayName("Social Security Number")]
    public string SSN { get; set; }
}

问题是这对我不起作用。当我在视图中遍历PEOPLE类的属性时,SSN属性不显示任何属性或customattributes。我可以看到PEOPLE类具有MetadataType属性。我已经尝试将类分成单独的文件,同一个文件,部分内部的元数据类,两个单独的,将元数据类设置为partial,internal,sealed,public,everything。我完全不知道为什么这对我来说并不适用于所有人都应该这样做。

请帮帮我。

PEOPLE课程如下:

public partial class PEOPLE
{
    public int ID { get; set; }
    public string SSN { get; set; }
    public string NAME { get; set; }
}

值得强调的是,我试图通过反射来查看属性的元数据属性。更多研究向我展示了如何提取元数据属性然后反映到元数据类PEOPLE_Metadata,但我真的更喜欢最小化反射爬行的数量。

2 个答案:

答案 0 :(得分:0)

这有效

internal sealed class AgencyReferredToMetadata
{
    //since this is used in a modal, we are really only using the error text 
    //of the validationSummary not the ValidationMessageFor
    [Required(ErrorMessage = "AgencyReferredTo is required.")]
    public string AgencyReferredTo1 { get; set; }

}

//http://stackoverflow.com/questions/14059455/adding-validation-attributes-with-an-entity-framework-data-model
[System.ComponentModel.DataAnnotations.MetadataType(typeof(AgencyReferredToMetadata))]
public partial class AgencyReferredTo : IEntity

答案 1 :(得分:0)

这个问题是很多年前提出的,但是最近我在使用使用.net和“数据库优先”解决方案的WPF应用程序时遇到了同样的问题。 EDMX .tt文件不会从MetadataType装饰器更新。

我不确定OP正在使用哪种类型的项目,但就我而言,我发现我必须自己创建一个验证上下文并手动验证所需内容。

demo on dbfiddle.uk-这篇文章使我想到了我的项目无法识别MetadataType装饰器的解决方案。

我按照示例进行操作,并创建了一个接受模型和元数据的泛型类,我可以删除部分内容,基本上只有一个“元数据”模型。

如果您不使用MVC应用程序,希望此功能可以帮助您指出正确的方向。