【问题标题】:Entity Framework multiple context and Microsoft Azure. How to update database?实体框架多上下文和 Microsoft Azure。如何更新数据库?
【发布时间】:2014-05-28 19:39:16
【问题描述】:

我有 ASP.NET MVC 5 解决方案,里面有大约 4 个项目。 + EF 代码优先 看完this article
我试图将应用程序 EF 上下文(asp.net 身份)与我的模型上下文分开。(​​单个数据库中的两个上下文)

现在我有 2 个不同背景的项目。

//main project
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("MyDB")
    {
    }
}
//another project
public class DALDbContext : DbContext
{
    public DALDbContext()
        : base("MyDB")
    {
    }
    ...
}

我可以这样更新数据库:

更新数据库-ProjectName:myProject.WEB

更新数据库-ProjectName:myProject.DAL

(在网络中我有 asp.net 身份)

如果我要从 Azure 中的 VisualStudio 发布此解决方案,我可以检查“执行代码优先迁移(在应用程序启动时运行)”。

但如果我理解正确,它只相当于一个命令:

更新数据库-ProjectName:myProject.WEB

因为它是默认项目。

我不明白如何运行这两个命令。 另一方面,我尝试分别执行这两个命令。我在“包管理器控制台”中写了类似的东西:

Update-Database -ConnectionString "Server=tcp:<server_name>.database.windows.net,1433;Database=<database_name>;User ID=<db_user_name>@<server_name>;Password=<password>;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;Max Pool Size=100;" -ConnectionProviderName "System.Data.SqlClient"

但我收到错误:“ConnectionString 属性尚未初始化。”

或者可能尝试从另一种种子方法运行...(但我认为它很糟糕)

最后 - 2个问题:

  1. 将一个上下文与另一个上下文分开是个好主意吗?
  2. 如何在 azure 上运行这些种子方法?(或您的变体)

【问题讨论】:

    标签: c# asp.net entity-framework azure entity-framework-migrations


    【解决方案1】:

    我自己解决问题。

    我做了什么:

    从 azure 站点获取实际的连接字符串。 是这样的:

    Data Source=tcp:"<address>.database.windows.net,1433;
    Initial Catalog=MyDB;
    User Id=<login>@<address>;Password=<password>;
    

    我还添加了“persist security info=True;”(可能不是必需的) 所以我们有

    Data Source=tcp:"<address>.database.windows.net,1433;
    Initial Catalog=MyDB;persist security info=True;
    User Id=<login>@<address>;Password=<password>;
    

    (单词之间的空格(例如“数据源”)是必需的)

    接下来将此连接字符串粘贴到您的 Web.config 文件中。你必须得到这样的东西: ... .database.windows.net,1433;初始目录=MyDB;持久安全信息=True;用户ID=@;密码=” />

    (如果您没有这些标签 - 复制粘贴并更改)

    现在查看您的 dbContext 文件。

    public class DALDbContext : DbContext
    {
        public DALDbContext ()
            : base("MyDB")
        {
        }
    ...
    }
    

    确保来自 Web.config 的 connectionString name(name="MyDB") 等于该值。 (以及在其他 dbContext 类中)

    最后只需在包管理器控制台中编写更新数据库命令:

    update-database -ProjectName:myProject.WEB
    
    update-database -ProjectName:myProject.DAL
    

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题,下面解决了:

      • 重命名连接 ("DefaultConnection") => ("UserConnection"); ("DefaultConnection") => ("DataConnection")
      • 更新和添加到 web.config 的连接
      • 重新启动发布过程几次

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-19
        • 2016-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多