【发布时间】:2022-10-13 19:07:19
【问题描述】:
我在尝试使用实体框架核心获取 DbContext 对象中的 DbSet 信息时遇到错误。我试图通过调用一个接收泛型类型 T 的方法来实例化上下文,该泛型类型 T 可能是 DbContext 的子级:
我的 DbContext 对象看起来是这样的:
public class CatalogueContext : DbContext
{
public DbSet<ConnectorCatalogueItemConv> CatalogueItemConvs { get; set; }
public CatalogueContext(DbContextOptions<CatalogueContext> options)
: base(options)
{
}
public CatalogueContext()
{
}
}
public T GetContext<T>() where T: DbContext, new()
{
var optionsBuilder = new DbContextOptionsBuilder<T>();
var connectionString = Configuration.GetConnectionString(ExternalTablesKey);
optionsBuilder.UseSqlServer(connectionString);
return Activator.CreateInstance(typeof(T), optionsBuilder.Options) as T;
}
【问题讨论】:
-
你能分享从.csproj 导入的包吗?
-
我刚刚添加了它。你可以检查一下。
-
在尝试修复它之前,您需要了解此方法的作用 - 或者决定您是否想要它。从这个包的意义上说,没有“批量删除”或“批量更新”。该包的作用是使用 SqlBulkCopy 将数据插入临时表,与主键上的目标连接,并根据需要插入、更新或删除。这适用于少量数据,但如果您经常需要加载大量数据,则必须自己设计临时表,使用适当的索引,并且很可能使用更高级的技术,如分区切换
-
当您有大量数据时,无论您如何保存数据,像 EF Core 这样的 ORM 只会增加开销。如果您有 100K 行要插入,那么您最不想做的就是将它们全部加载到内存中并跟踪它们。这根本不是 ORM 的用途
标签: entity-framework-core .net-6.0 ef-core-6.0