我试图从类对象类型中获取DbSet名称。这是DbContext中DbSet的定义:
public DbSet<User.Role> Roles { get; set; }
现在,从typeof(Role)
我需要获取DbSet的名称&#34;角色&#34;。
有什么方法可以解决这个问题吗?
答案 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
{
}
}