我正在使用EF 4.1 Code First,使用Fluent Mapping:
实体:
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"
或类似的东西不感兴趣 - 如何从映射中正确完成?
答案 0 :(得分:4)
您需要访问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);
}
}
}