Entity Framework 6.0 带有空的 DbContext-Constructor
Entity Framework 6.0 with empty DbContext-Constructor
我有一个 ASP-WebForms-Application 供 3 个公司使用。每个公司都有自己的数据库和 EDMX 模型。数据库中的结构是相同的。在参数上,我正在检查它是哪家公司,并希望所有模型都有一个 DbContext。
我是 Entity Framework 的新手,不知道如何为几个模型创建一个上下文。
我尝试制作一个 class 给我一个 DbContext,我想在其中使 DBContext 成为模型之一。
我正在尝试:
public static DbContext holeDbContextWsvWsbSvs()
{
DbContext context = new DbContext();
string verbandKürzel = config.holeVerbandKürzel();
if (verbandKürzel == "wsv")
{
context = new wsvEntities();
}
else if (verbandKürzel == "wsb")
{
context = new wsbEntities();
}
else if (verbandKürzel == "svs")
{
context = new svsEntities();
}
return context;
}
但在 Entity Framework 6.0 中似乎不可能使用空的构造函数!
是否可以初始化一个 Null(Fake,Pseudo)-DbContext 之类的东西,然后将其更改为 Model-Context?
谁能给我一个冲动,我怎样才能实现我的计划?
编辑:
好的,通过为构造函数提供任何字符串,将上下文更改为方法内的模型。但是,尽管在方法中为 Context 提供了一个特定的模型,但我返回了一个 DbContext,此后不能使用 Object-Attributes。
有什么建议吗?或者真的必须在我需要使用 DataModel IF-ELSE 的每个位置进行操作并对每个模型执行相同的逻辑吗?
如果 DbContext 的结构相同,而您只想指向三个数据库之一,则无需声明 3 个单独的 DbContext,只需声明一个,然后使用 Constructor 参数指定适当的连接字符串.
public class AppDbContext : DbContext
{
// Define DbSets etc.
public AppDbContext(string connection)
: base (connection)
{ }
}
然后在你的初始化代码中:
public AppDbContext holeDbContextWsvWsbSvs()
{
string verbandKürzel = config.holeVerbandKürzel();
switch (verbandKürzel)
{
case "wsv":
return new AppDbContext("wsvEntities");
case "wsb":
return new AppDbContext("wsbEntities");
case "svs":
return new AppDbContext("svsEntities");
default:
throw new InvalidOperationException("The configured client is not supported.");
}
}
假设您有分别称为“wsvEntities”、“wsbEntities”和“svsEntities”的连接字符串。
如果 DbContext 在结构上不相同,那么老实说,您可能会遇到更大的问题,这些问题无法通过基本 DbContext 公开它们来解决。
我有一个 ASP-WebForms-Application 供 3 个公司使用。每个公司都有自己的数据库和 EDMX 模型。数据库中的结构是相同的。在参数上,我正在检查它是哪家公司,并希望所有模型都有一个 DbContext。
我是 Entity Framework 的新手,不知道如何为几个模型创建一个上下文。
我尝试制作一个 class 给我一个 DbContext,我想在其中使 DBContext 成为模型之一。
我正在尝试:
public static DbContext holeDbContextWsvWsbSvs()
{
DbContext context = new DbContext();
string verbandKürzel = config.holeVerbandKürzel();
if (verbandKürzel == "wsv")
{
context = new wsvEntities();
}
else if (verbandKürzel == "wsb")
{
context = new wsbEntities();
}
else if (verbandKürzel == "svs")
{
context = new svsEntities();
}
return context;
}
但在 Entity Framework 6.0 中似乎不可能使用空的构造函数!
是否可以初始化一个 Null(Fake,Pseudo)-DbContext 之类的东西,然后将其更改为 Model-Context?
谁能给我一个冲动,我怎样才能实现我的计划?
编辑: 好的,通过为构造函数提供任何字符串,将上下文更改为方法内的模型。但是,尽管在方法中为 Context 提供了一个特定的模型,但我返回了一个 DbContext,此后不能使用 Object-Attributes。
有什么建议吗?或者真的必须在我需要使用 DataModel IF-ELSE 的每个位置进行操作并对每个模型执行相同的逻辑吗?
如果 DbContext 的结构相同,而您只想指向三个数据库之一,则无需声明 3 个单独的 DbContext,只需声明一个,然后使用 Constructor 参数指定适当的连接字符串.
public class AppDbContext : DbContext
{
// Define DbSets etc.
public AppDbContext(string connection)
: base (connection)
{ }
}
然后在你的初始化代码中:
public AppDbContext holeDbContextWsvWsbSvs()
{
string verbandKürzel = config.holeVerbandKürzel();
switch (verbandKürzel)
{
case "wsv":
return new AppDbContext("wsvEntities");
case "wsb":
return new AppDbContext("wsbEntities");
case "svs":
return new AppDbContext("svsEntities");
default:
throw new InvalidOperationException("The configured client is not supported.");
}
}
假设您有分别称为“wsvEntities”、“wsbEntities”和“svsEntities”的连接字符串。
如果 DbContext 在结构上不相同,那么老实说,您可能会遇到更大的问题,这些问题无法通过基本 DbContext 公开它们来解决。