【问题标题】:MVC4 Multiple DatabasesMVC4 多数据库
【发布时间】:2013-12-19 10:00:30
【问题描述】:

我是 MVC4 框架的新手,并且一直在开发一个许可应用程序,该应用程序必须为不同的产品使用不同的数据库(每个数据库都包含一个产品的少数表 - 全部由专有许可工具生成)。我的应用程序应该能够支持各种产品上的 CRUD 功能,因此需要多个 DbContext 对象来针对每个产品的不同型号。

据我所知,每个这样的DbContext 对象都需要Web.config 文件中的连接字符串。我正在努力列出(Index.cshtml)各种产品的现有许可证,使用DropDownList 控件,对于每个产品,每当用户从DropDownList 控件中选择不同的产品时,我都需要连接到不同的数据库.

我们将不胜感激任何帮助。谢谢。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 dbcontext


    【解决方案1】:

    据我了解您的问题,核心问题是每当用户从 DropDownList 中选择不同的产品时,您都在努力连接到不同的数据库。正如您所说,是的 DbContext 对象需要 Web.config 文件中的连接字符串。您可以在配置中指定multiple connection strings
    此外,您绝对可以将不同的连接字符串传递给DBContext constructor。通常,您的 DAL/数据访问层或存储库层会从 Web.Config/App.config 中提取适当的连接字符串并将其传递给 DBContext 构造函数。查看类似的方法herehere

    更新:

    您不能与多个数据库共享同一个 DbContext。您的每个数据库都需要multiple DbContexts

    附加 这样做的很少,但如果你使用 Repostory 和 Unit Of Work 模式,你可以使用类似this的方法

    您将拥有的每个 DbContext,您都可以在上下文中与该数据库中的一组实体相关联。类似下面的东西

    public class ProductContext : DbContext
    {
        public ProductContext ()
            : base("connectionStringA")
        {
        }
    
        public DbSet<Product> Accounts { get; set; }
    }
    
    
    public class LicenceContext : DbContext
    {
        public LicenceContext ()
            : base("connectionStringB")
        {
        }
    
        public DbSet<Licence> Licenses{ get; set; }
    } 
    

    【讨论】:

    • 感谢您的回答。这是否意味着DbContext 对象不绑定到任何特定的模型类?我可以在DbContext 下拥有多个模型类吗(抱歉,我对此真的很陌生!)?从示例看来,两个数据库都具有相同的表架构,而我的数据库并非如此,鉴于我的模型中有不同的类,是否会在 ctor 工作中传递不同的连接字符串?
    • @Kunal 我已经更新了您的 cmets/问题的答案。
    • 谢谢斯波克!我知道...非常延迟的响应。但是你的各种选择已经为我工作了。我现在有两个连接字符串,只有一个 DBContext。在重新审视您的答案几次后,我重构了我的模型和数据库,它们反映了相同的字段。在用户交互时,我只需使用新的连接字符串重新初始化 DBContext。一切都像魅力一样!谢谢你的帮助! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多