C# Net核心:使用变量类型声明新的DbContext

C# Net核心:使用变量类型声明新的DbContext,c#,.net,entity-framework,.net-core,entity-framework-core,C#,.net,Entity Framework,.net Core,Entity Framework Core,如何声明DbContextOptionsBuilder,其中DbContext存储在一个变量中(在本例中,DbContext的真实名称是“OnlineShoppingStore”,但存储在下面的两个变量中) var dbContextType = dbContextAssembly.GetTypes().Where(d => d.BaseType.Name == "DbContext").First(); var businessDbContext = Activator.CreateIn

如何声明DbContextOptionsBuilder,其中DbContext存储在一个变量中(在本例中,DbContext的真实名称是“OnlineShoppingStore”,但存储在下面的两个变量中)

var dbContextType = dbContextAssembly.GetTypes().Where(d => d.BaseType.Name == "DbContext").First();
var businessDbContext = Activator.CreateInstance(dbContextType) as DbContext;
DbContextOptionsBuilder optionsBuilder = new DbContextOptionsBuilder();

// Attempting Line Below
var options = new DbContextOptionsBuilder<dbContextType>().UseInMemoryDatabase(databaseName: "Test").Options;

就快到了。您可以使用以下方法创建泛型类型的实例:

Type dbContextType = typeof(MyDbContext);
// 1st get type of Generic object
Type dbContextOptionsBuilderType = typeof(DbContextOptionsBuilder<>);
// 2nd call "MakeGenericType" method by passing the "T" type
Type dbContextOptionsBuilderGenericType = dbContextOptionsBuilderType.MakeGenericType(dbContextType);
// 3rd create an instance by using "Activator.CreateInstance"
DbContextOptionsBuilder dbContextOptionsBuilderInstance = Activator.CreateInstance(dbContextOptionsBuilderGenericType) as DbContextOptionsBuilder;

DbContextOptions dbContextOptions = dbContextOptionsBuilderInstance.UseInMemoryDatabase(databaseName: "Test").Options;
Type-dbContextType=typeof(MyDbContext);
//第一个获取泛型对象的类型
类型dbContextOptionsBuilderType=typeof(DbContextOptionsBuilder);
//通过传递“T”类型第二次调用“MakeGenericType”方法
键入DbContextOptions BuilderGenericType=DbContextOptions BuilderType.MakeGenericType(dbContextType);
//第三,使用“Activator.CreateInstance”创建实例
DbContextOptionsBuilderDbContextOptionsBuilderInstance=Activator.CreateInstance(dbContextOptionsBuilderGenericType)作为DbContextOptionsBuilder;
DbContextOptions DbContextOptions=DbContextOptions BuilderInstance.UseInMemoryDatabase(databaseName:“Test”).Options;

“”是原始解决方案。

您可以使用非通用版本的
DbContextOptionsBuilder
吗?如何操作?您可以将其链接到汇编语句吗?我正在尝试在我的一个程序集上运行第一条语句dbContextType,不工作,相同的错误类型test=typeof(dbContextType)同时尝试运行最后一条语句new businessDbContext(dbContextOptions)需要实例化dbContext,并使用其选项尝试此操作,对我来说效果很好Assembly dbContextAssembly=Assembly.GetExecutionGassembly();var dbContextType=dbContextAssembly.GetTypes()。其中(p=>p.BaseType.Name==“DbContext”).First();
Type dbContextType = typeof(MyDbContext);
// 1st get type of Generic object
Type dbContextOptionsBuilderType = typeof(DbContextOptionsBuilder<>);
// 2nd call "MakeGenericType" method by passing the "T" type
Type dbContextOptionsBuilderGenericType = dbContextOptionsBuilderType.MakeGenericType(dbContextType);
// 3rd create an instance by using "Activator.CreateInstance"
DbContextOptionsBuilder dbContextOptionsBuilderInstance = Activator.CreateInstance(dbContextOptionsBuilderGenericType) as DbContextOptionsBuilder;

DbContextOptions dbContextOptions = dbContextOptionsBuilderInstance.UseInMemoryDatabase(databaseName: "Test").Options;