Die*_*uza 10 c# entity-framework entity-framework-6 ef-fluent-api
使用Entity-Framework 6我可以通过Fluent Api设置配置,如下所示:
public class ApplicationUserConfiguration : EntityTypeConfiguration<ApplicationUser>
{
public ApplicationUserConfiguration()
{
this.HasKey(d => d.Id);
this.Ignore(d => d.UserId);
}
}
Run Code Online (Sandbox Code Playgroud)
来自这个问题
使用属性方法我能够通过反射了解属性角色是什么,但我想知道如何检索这些配置,Key例如,使用Fluent Api方法?
EntityTypeConfiguration<>班上没有公共财产.
有可能得到这个Key和ForeignKey某种程度上?
有一个MetadataWorkspace类提供API来检索有关Entity Framework的存储,模型,CLR类型和映射的元数据.
表示ADO.NET元数据运行时服务组件,该组件提供对从各种源检索元数据的支持.
有一个实例DbContext,你可以MetadataWorkspace使用以下代码找到它:
var metadataWorkspace = ((IObjectContextAdapter)dbContext).ObjectContext.MetadataWorkspace;
Run Code Online (Sandbox Code Playgroud)
然后,您可以获得包含不同类型模型的项集合,包括对象模型,概念模型,存储(数据库)模型以及概念模型和存储模型之间的映射模型.
EntityType对于给定的clr类型,以下扩展方法返回:
using System;
using System.Data.Entity;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Infrastructure;
using System.Linq;
public static class DbContextExtensions
{
public static EntityType GetEntityMetadata<TEntity>(this DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException(nameof(dbContext));
var metadataWorkspace = ((IObjectContextAdapter)dbContext)
.ObjectContext.MetadataWorkspace;
var itemCollection = ((ObjectItemCollection)metadataWorkspace
.GetItemCollection(DataSpace.OSpace));
var entityType = metadataWorkspace.GetItems<EntityType>(DataSpace.OSpace)
.Where(e => itemCollection.GetClrType(e) == typeof(TEntity)).FirstOrDefault();
if (entityType == null)
throw new Exception($"No entity mapped to CLR type '{typeof(TEntity)}'.");
return entityType;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用EntityType提取有关模型的更多信息,例如,您可以找到关键属性的列表:
var keys = dbcontext.GetEntityMetadata<Category>().KeyProperties.Select(x=>x.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |