DbContext.Set(Type) 从 EF 6 迁移到 EF Core

问题描述 投票:0回答:1

我正在尝试从 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;
}
c# .net-core entity-framework-core
1个回答
-1
投票

你可以只使用反射。

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
的值?您可能应该考虑接口,然后您可以使用通用函数。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.