C# 如何将反射得到的对象投射到DbSet<;类型>;
我有一个DbContext实例,它的属性是DbSet。我已经使用反射来获取每个DbSet的所有实例,但是我不能使用它,因为我不能将它投射到DbSet中C# 如何将反射得到的对象投射到DbSet<;类型>;,c#,entity-framework,reflection,C#,Entity Framework,Reflection,我有一个DbContext实例,它的属性是DbSet。我已经使用反射来获取每个DbSet的所有实例,但是我不能使用它,因为我不能将它投射到DbSet中 var types=\u dbContext.GetType().GetProperty(); foreach(类型中的变量类型){ var dbSetValue=type.GetValue(_dbContext,null); var entities=dbSetValue.ToList();//错误原因是我无法强制转换它。 } 因此在本例中,
var types=\u dbContext.GetType().GetProperty();
foreach(类型中的变量类型){
var dbSetValue=type.GetValue(_dbContext,null);
var entities=dbSetValue.ToList();//错误原因是我无法强制转换它。
}
因此在本例中,我想将
dbSetValue
强制转换为它的类型(DbSet..),问题是DbSet具有泛型,即不能强制转换。可能吗?首先,我建议检查PropertyType是否真的是一个DBSet
请注意,type.GetValue(_dbContext)
返回一个对象,但在反射过程中应将该类型作为动态
处理
由于需要动态支持IEnumerable
方法,因此需要使用IEnumerable
您的代码应该如下所示:
var types = _dbContext.GetType().GetProperties();
// Check if property is really a DbSet<TEntity>
var filteredTypes = types.Where(x => x.PropertyType.IsGenericType
&& x.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>));
foreach (var type in filteredTypes)
{
var dbSet = (IEnumerable<dynamic>) type.GetValue(_dbContext);
var entities = dbSet.ToList();
}
var types=\u dbContext.GetType().GetProperties();
//检查属性是否真的是DbSet
var filteredTypes=types.Where(x=>x.PropertyType.IsGenericType
&&x.PropertyType.GetGenericTypeDefinition()==typeof(DbSet));
foreach(filteredTypes中的变量类型)
{
var dbSet=(IEnumerable)type.GetValue(_dbContext);
var entities=dbSet.ToList();
}
实体应该是什么样的数据类型?实体应该是一个实体列表,就像列表一样。你不能创建一个列表。实体的类型需要在编译时知道。那么,我可以通过反射获取该实体的列表吗?您是否尝试将dbSetValue设置为动态?在这种情况下,var将类型替换为object,但如果强制使用动态变量,它应该可以工作