2016-12-10 4 views
1

Ich versuche, den DbSet-Namen von der Klasse Objekttyp zu bekommen. Dies ist die Definition des DbSet im DbContext:Get DbSet Name von Klasse Objekttyp

public DbSet<User.Role> Roles { get; set; } 

nun von typeof(Role) ich den Namen der DbSet „Rollen“ bekommen müssen.

Es gibt eine Möglichkeit, das zu bekommen?

+0

ich ein paar Fragen haben: Sind Sie mit Entity Framework 6 ?, Sie müssen die 'Property' finden genannt' Roles' im DbContext oder einfach nur die Art der 'DbSet '? –

+0

Hallo Andrés. Ja! Ich benutze EF6. Ich brauche nur den Namen "Rollen" in der Zeichenfolge, es ist okay. Von typeof (Rolle) –

Antwort

2

Sind Sie danach?

public static void Main() 
{ 
    var roleType = typeof(User.Role); 

    var context = new FakeDbContext(); 

    var propertyInfo = GetDbSetProperty(roleType, context); 

    Console.WriteLine(propertyInfo.Name); 
} 

public static PropertyInfo GetDbSetProperty(Type typeOfEntity, FakeDbContext context) 
{ 
    var genericDbSetType = typeof(DbSet<>); 
    // typeof(DbSet<User.Role>); 
    var entityDbSetType = genericDbSetType.MakeGenericType(typeOfEntity); 

    // DbContext type 
    var contextType = context.GetType(); 

    return contextType 
     .GetProperties(BindingFlags.Public | BindingFlags.Instance) 
     .Where(p => p.PropertyType == entityDbSetType) 
     .FirstOrDefault();  
} 

public class FakeDbContext 
{ 
    public DbSet<User.Role> Roles { get; set; } 
} 

public class DbSet<T> 
{ 
} 

public class User 
{ 
    public class Role 
    { 
    } 
}