2011-08-27 8 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)のタイプを知っていれば、このコンフィグレーション(および他のエンティティに対する同様の宣言/マッピング)を使用すると、そのエンティティのキ​​ープロパティのタイプと名前を取得できます。エンティティクラス? - マッピングで定義したので、IDbSetMyClassまたはDbContextの派生したエンティティコンテナのいずれかからこれを返すべきではありませんか?

keyname = classname + "ID"またはそれに類するものを想定しているのではなく、マッピングからどのように正しく行われていますか?ポインタをありがとう - ニース1:

答えて

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にアクセスする必要があります –

関連する問題