EDMX EF 6.0 的 DataAnnotations 不起作用

DataAnnotations with EDMX EF 6.0 does not work

我的模型有一个来自 EF 6.0 的 .EDMX,我想向我的一些字段添加属性。我读过许多示例,其中他们将 DataAnnotations 与 MetadataType 结合使用...我尝试实现它,但它不会覆盖...例如,如果我有

[Queryable]
public string Name;

它不会起作用。

但如果我有

[Queryable]
public string Name2;

它会起作用,我会在属性中看到 Name2!

我用来查找这些属性的代码如下:

var properties = typeof(TEntity).GetProperties().Where(prop => prop.IsDefined(typeof(QueryableAttribute), false));

就像我说的,当我有 Name2 时,我可以在属性列表中找到它。当我有名字时,我不...

这是我的 3 个文件,它们都在 "MMS.Entities" 命名空间中

AreaMetadata.cs

    namespace MMS.Entities
{
    [MetadataType(typeof(AreaMetadata))]
    public partial class Area 
    {}

    public class AreaMetadata
    {
        [Queryable]
        public string Name;
        [Queryable]
        public string Abbreviation;
        [Queryable]
        public string Description;
    }
}

Area.cs

namespace MMS.Entities
    {
        using MMS.Common.Utilities;
        using System;
        using System.Collections.Generic;
        using System.ComponentModel.DataAnnotations;

        public partial class Area : Entity, IEntity
        {
            public Area()
            {
                this.Plants = new HashSet<Plant>();
            }

            public int Id { get; set; }
            public string Name { get; set; }
            public string Abbreviation { get; set; }
            public string Description { get; set; }
            public bool IsActive { get; set; }
            public bool IsDeleted { get; set; }
            public int UserCreatedId { get; set; }
            public Nullable<int> UserModifiedId { get; set; }
            public System.DateTime DateCreated { get; set; }
            public Nullable<System.DateTime> DateModified { get; set; }

            public virtual ICollection<Plant> Plants { get; set; }
        }
    }

AreaMetadata.cs 的名称应该不同吗?我是否应该在某处包含任何内容以使它们一起工作?

感谢您的指点!

我相信有人回答了类似的问题 here

当您尝试访问 MetadataType 属性 属性时,您必须使用反射到达 MetadataType,而不仅仅是使用 class =11=]。我提供的 link 中有一个解释以及如何获取它的示例。

基本上,使用反射来获取 AreaMetadata 属性,而不是 Area 属性。

尝试:

    MetadataTypeAttribute metadata = typeof(TEntity)
        .GetCustomAttributes(typeof(MetadataTypeAttribute), true)
        .OfType<MetadataTypeAttribute>().ToArray().FirstOrDefault();    

    PropertyInfo[] properties = metadata.MetadataTypeClass.GetProperties()
        .Where(prop => prop.IsDefined(typeof(Queryable), false));