EF 4.1:使用Fluent Mapping从Code First中查找关键属性类型

时间:2011-08-27 21:54:51

标签: c# entity-framework-4.1 ef-code-first

我正在使用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 MyClassDbContext派生的实体容器中取回它?

我对假设keyname = classname + "ID"或类似的东西不感兴趣 - 如何从映射中正确完成?

1 个答案:

答案 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);
            }
        }
 }