我的模型中有一个.EDMX,来自EF 6.0,我想在我的某些字段中添加属性。我已经阅读了许多使用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的名称是否应该不同?我是否应该在某处包含任何内容以使它们一起工作?
感谢您的建议!
答案 0 :(得分:1)
我相信类似的问题已得到解答here。
当您尝试访问MetadataType
属性属性时,您必须使用反射来访问MetadataType
,而不仅仅是使用MetadataType
的类。我提供的链接中有一个解释,以及如何获得它的示例。
基本上,使用反射来获取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));