EF 4.1:使用Fluent Mapping首先从代码中查找关键属性类型

本文关键字:查找 代码 类型 属性 使用 Fluent Mapping EF | 更新日期: 2023-09-27 18:06:54

我首先使用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"或类似-它是如何从映射正确完成的?

EF 4.1:使用Fluent Mapping首先从代码中查找关键属性类型

您需要访问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);
            }
        }
 }