从类对象类型中获取DbSet名称

时间:2016-12-10 15:10:37

标签: c# asp.net entity-framework

我试图从类对象类型中获取DbSet名称。这是DbContext中DbSet的定义:

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

现在,从typeof(Role)我需要获取DbSet的名称&#34;角色&#34;。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

这就是你想要的吗?

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
    {
    }
}