首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net核心2带ef核心迁移与码头的开发

.net核心2带ef核心迁移与码头的开发
EN

Stack Overflow用户
提问于 2018-02-17 19:54:35
回答 2查看 3.4K关注 0票数 3

我正在工作一个新的项目,我将在一个容器中托管,所以我想在整个过程中与码头开发。但是,从命令行运行的实体框架迁移似乎不知道数据库服务正在运行。

我的连接字符串:

代码语言:javascript
复制
"DefaultConnection": "Server=db;Database=Site;User=sa;Password=pwd;"

我的码头工:

代码语言:javascript
复制
version: '3'

services:
  db:
    image: microsoft/mssql-server-windows-express
    environment:
          sa_password: "pwd"
          ACCEPT_EULA: "Y"
        networks:
          - testnetwork

  site:
    image: site
    build:
      context: .
      dockerfile: Site\Dockerfile
    environment:
      - "Data:SqlServerConnectionString=Server=db;Database=HSRDC;User Id=sa;Password=pwd;MultipleActiveResultSets=true;App=site"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    ports:
          - "80"
        networks:
          - testnetwork
        depends_on:
          - db

    networks:
      testnetwork:
        external:
          name: nat

我的创业与续集作品:

代码语言:javascript
复制
public static void Initialize(CustomerDbContext context)
    {
        context.Database.EnsureCreated();

但是,在以后的开发中,我希望过渡到迁移。当我尝试用dotnet数据库更新eror更新数据库时:

System.Data.SqlClient.SqlException (0x80131904):在建立到Server的连接时发生了与网络相关的或特定于实例的错误。找不到或无法访问服务器。

如果我检查容器并获取ip地址,并将连接字符串更改为包含IP,如:

代码语言:javascript
复制
"DefaultConnection": "Server=172.20.159.97;Database=HSRDC;User=sa;Password=SFMasc32*;"

迁徙会很好的。

但是,这很麻烦,因为我需要运行来启动容器,然后停止并获取IP地址,然后修改它们与IP的连接字符串,然后再次运行,然后通过CLI迁移。

我可以看到的选项是在我的撰写文件中指定IP地址和在连接字符串中指定IP的硬代码,但是在v3中,您似乎不能指定一个IP地址

是否有一种方法可以使这种方式更加无缝,以便在visual studio中与docker一起开发,以及如何处理迁移和对接?

EN

回答 2

Stack Overflow用户

发布于 2018-02-17 20:57:18

如果您的IP正在工作,而名称不起作用。然后尝试给出DBServer的全名,例如DBServer.domain.xyz

票数 2
EN

Stack Overflow用户

发布于 2018-08-06 04:34:13

您可以实现由dotnet命令行工具使用的IDesignTimeDbContextFactory<TContext>。在您的DesignTimeDbContextFactory核心项目中创建一个名为asp.net的文件(我将它放在数据文件夹中)。其内容应是:

代码语言:javascript
复制
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<MyDBContext>
{
    public MyDBContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<MyDBContext>();
        var connectionString = configuration.GetConnectionString("migrationContextConnection");
        builder.UseSqlServer(connectionString);
        return new MyDBContext(builder.Options);
    }
}

然后将以下连接字符串添加到appsettings.json

代码语言:javascript
复制
  "ConnectionStrings": {
    "migrationContextConnection": "Server=localhost;Database=HSRDC;User=sa;Password=SFMasc32*;"
  }

现在,您必须从SQL容器中公开端口,以便主机系统能够访问它。将下列内容添加到您的码头组合中:

代码语言:javascript
复制
version: '3'

services:
  db:
    image: microsoft/mssql-server-windows-express
    environment:
      sa_password: "pwd"
      ACCEPT_EULA: "Y"
    networks:
      - testnetwork
    ports:
      - "1433:1433" 

您现在可以运行dotnet ef database update了,它可以工作了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48845324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档