2011-08-27 120 views
0

我使用EF 4.1代码首先,用流利的映射: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"或类似 - 它如何从映射中正确地完成?

回答

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); 
      } 
     } 
} 
+0

+1:尼斯一个 - 感谢指针 –

相关问题