繁体   English   中英

具有空 DbContext-Constructor 的实体框架 6.0

[英]Entity Framework 6.0 with empty DbContext-Constructor

我有一个适用于 3 家公司的 ASP-WebForms-Application。 每家公司都有自己的数据库和自己的 EDMX 模型。 数据库中的结构是相同的。 在参数上,我正在检查它是哪家公司,并希望为所有模型拥有一个 DbContext。

我是实体框架的新手,不知道如何为几个模型制作一个上下文。

我试图制作一个 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 中,似乎不可能使用 emtpy 构造函数!

是否可以初始化 Null(Fake,Pseudo)-DbContext 或其他东西,然后将其更改为模型上下文?

谁能给我一个冲动,我怎样才能实现我的计划?

编辑:好的,通过为构造函数提供任何字符串来实现方法内的 Model 的上下文更改。 但是,虽然在方法内部给 Context 一个特定的 Model,我返回一个 DbContext 之后不能使用 Object-Attributes。

有什么建议么? 或者真的必须在每个 position 我需要使用 DataModel IF-ELSE 并为每个 Model 执行相同的逻辑?

如果 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”的连接字符串。

如果 DbContexts 在结构上不相同,那么老实说,您可能会遇到更大的问题,这些问题无法通过基础 DbContext 公开它们来解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM