EF 4.1: Busque el tipo de propiedad clave desde el código primero con Fluent Mapping

Estoy usando EF 4.1 Code First, con un mapeo fluido:

Entidad:

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

Cartografía:

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

Dada esta configuración (y una serie de declaraciones / asignaciones similares para otras entidades), si conozco el tipo de clase de entidad (es decir, MyClass) ¿Es posible obtener el tipo y el nombre de la propiedad clave de la clase de entidad? - Ya que lo definí en el mapeo, ¿no debería poder recuperar esto de ninguno de los dos? IDbSet para MyClass o mi DbContext contenedor de entidad derivada?

No me interesa simplemente asumir eso keyname = classname + "ID" o similar: ¿cómo se hace correctamente a partir de las asignaciones?

preguntado el 27 de agosto de 11 a las 21:08

1 Respuestas

Necesitas acceder al 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);
            }
        }
 }

Respondido 28 ago 11, 07:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.