EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型
Posted
技术标签:
【中文标题】EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型【英文标题】:EF 4.1: Find Key Property Type from Code First with Fluent Mapping 【发布时间】:2011-08-27 21:54:50 【问题描述】:我使用的是 EF 4.1 Code First,带有 Fluent 映射:
实体:
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"
或类似的 - 它是如何从映射中正确完成的?
【问题讨论】:
【参考方案1】:您需要访问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);
【讨论】:
以上是关于EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型的主要内容,如果未能解决你的问题,请参考以下文章
EF 4.1 RC Code First - 映射到现有数据库并指定外键名称
如何使用 Code-First EF 4.1 从数据库中删除多个项目
如何让 Web API odatamodelbuilder 使用 EF fluent API 映射