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

Posted

技术标签:

【中文标题】EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型【英文标题】:EF 4.1: Find Key Property Type from Code First with Fluent Mapping 【发布时间】: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" 或类似的 - 它是如何从映射中正确完成的?

【问题讨论】:

【参考方案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);
            
        
 

【讨论】:

以上是关于EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.1 RC Code First - 映射到现有数据库并指定外键名称

使用 fluent 为实体框架 4.1 设置递归映射

如何使用 Code-First EF 4.1 从数据库中删除多个项目

如何让 Web API odatamodelbuilder 使用 EF fluent API 映射

EF Code First Fluent API指定外键属性

EF Fluent API上