我正在尝试从 EF 6 迁移到 EF Core v8,但是我遇到了障碍,因为 EF Core 不再支持使用
DbSet
方法创建 Set(Type entityType)
。它已被替换为Set<TEntity>()
。
private Type DataModelType;
public virtual object Create()
{
DbContext dbContext = this.GetDbContext();
object obj = dbContext.Set(this.DataModelType).Create();
return obj;
}
你可以只使用反射。
using var dbContext = this.GetDbContext();
var method = typeof(DbContext)
.GetMethod(nameof(DbContext.Set))
.MakeGenericMethod(this.DataModelType);
IEnumerable<object> obj = (IEnumerable<object>)method.Invoke(dbContext, null);
您可以将
method.CreateDelegate
的结果缓存在某种查找字典中以获得额外的性能。
话虽如此,做这种事情并没有多大意义。无论如何,您会如何处理这些输入为
object
的值?您可能应该考虑接口,然后您可以使用通用函数。