实体框架多个上下文和Microsoft Azure.如何更新数据库?

chr*_*igo 7 c# asp.net entity-framework azure ef-migrations

我有ASP.NET MVC 5解决方案,里面有大约4个项目.+ EF代码优先阅读本文后,
我尝试将应用程序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")
    {
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样更新数据库:

update-database -ProjectName:myProject.WEB

update-database -ProjectName:myProject.DAL

(在网上我有asp.net身份)

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

在此输入图像描述

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

update-database -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"
Run Code Online (Sandbox Code Playgroud)

但我得到错误:"ConnectionString属性尚未初始化."

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

最后 - 2个问题:

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

chr*_*igo 4

我自己解决问题。

我做了什么:

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

Data Source=tcp:"<address>.database.windows.net,1433;
Initial Catalog=MyDB;
User Id=<login>@<address>;Password=<password>;
Run Code Online (Sandbox Code Playgroud)

我还添加了“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>;
Run Code Online (Sandbox Code Playgroud)

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

接下来,将此连接字符串粘贴到您的 Web.config 文件中。你必须得到类似的东西: ... .database.windows.net,1433;Initial Catalog=MyDB;persist security info=True;User Id=@;Password=" />

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

现在查看您的 dbContext 文件。

public class DALDbContext : DbContext
{
    public DALDbContext ()
        : base("MyDB")
    {
    }
...
}
Run Code Online (Sandbox Code Playgroud)

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

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

update-database -ProjectName:myProject.WEB

update-database -ProjectName:myProject.DAL
Run Code Online (Sandbox Code Playgroud)