EF 4.1:使用Fluent Mapping首先从代码中查找关键属性类型
本文关键字:查找 代码 类型 属性 使用 Fluent Mapping EF | 更新日期: 2023-09-27 18:06:54
我首先使用EF 4.1代码,使用流畅的映射:
实体:public class MyClass
{
public int MyClassID { get; set; }
public string Name { get; set; }
}
映射:
public class MyClassMapping: EntityTypeConfiguration<MyClass>
{
public MyClassMapping()
{
Map(t => t.ToTable("MyClass"))
.HasKey(t => t.MyClassID);
Property(t => t.MyClassID)
.IsRequired()
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(t => t.Name)
.IsRequired()
.HasMaxLength(200);
}
}
给定此配置(以及其他实体的许多类似声明/映射),如果我知道实体类的类型(即MyClass
)是否有可能获得实体类的关键属性的类型和名称?-因为我已经在映射中定义了它,我不应该从IDbSet
的MyClass
或我的DbContext
派生实体容器中得到这个吗?
我不感兴趣的只是假设keyname = classname + "ID"
或类似-它是如何从映射正确完成的?
您需要访问MetadataWorkspace
public class MyContext : DbContext
{
public void Test()
{
var objectContext = ((IObjectContextAdapter)this).ObjectContext;
var mdw = objectContext.MetadataWorkspace;
var items = mdw.GetItems<EntityType>(DataSpace.CSpace);
foreach (var i in items)
{
Console.WriteLine("Class Name: {0}", i.Name);
Console.WriteLine("Key Property Names:");
foreach (var key in i.KeyMembers)
{
Console.WriteLine(key.Name);
}
}
}