【问题标题】:EF 4.1: Find Key Property Type from Code First with Fluent MappingEF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型
【发布时间】: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),是否可以获得关键属性的类型和名称实体类? - 由于我已经在映射中定义了它,我是否应该能够从 IDbSetMyClass 或我的 DbContext 派生的实体容器中取回它?

我不想仅仅假设 keyname = classname + "ID" 或类似的 - 它是如何从映射中正确完成的?

【问题讨论】:

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


    【解决方案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);
                }
            }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多