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));
我的模型有一个来自 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));