EF 4.1. Поиск типа ключевого свойства из кода «Сначала» с помощью отображения по методу - PullRequest
0 голосов
/ 28 августа 2011

Сначала я использую код EF 4.1 с Fluent Mapping:

Entity:

public class MyClass
{
    public int MyClassID { get; set; }
    public string Name { get; set; }
}

Mapping:

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), возможно ли получить свойство Type и Name ключа класса сущности?- Поскольку я определил это в отображении, я не смогу получить его обратно из IDbSet для MyClass или из моего производного контейнера DbContext Entity?

Меня не интересуетпросто предположив, что keyname = classname + "ID" или подобное - как это правильно сделать из сопоставлений?

1 Ответ

4 голосов
/ 28 августа 2011

Вам необходимо получить доступ к 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);
            }
        }
 }
...