【问题标题】:Entity Framework Core - 'Update-Database' not working实体框架核心 - “更新数据库”不起作用
【发布时间】:2020-05-03 02:36:37
【问题描述】:

在我的解决方案中,我有几个 .NET Core 2.0 项目:

  • App.DataAccess
  • App.DataAccess.Migrations
  • App.WebApi

App.DataAccess.Migrations(我想用作迁移程序集)中,我有一个AppDbContextFactory 类:

namespace App.DataAccess.Migrations
{
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Design;
    using Microsoft.Extensions.Configuration;
    using System.IO;

    public sealed class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
    {
        public AppDbContextFactory()
        {
            Configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
        }

        public IConfiguration Configuration { get; }

        public AppDbContext CreateDbContext(string[] args)
        {
            DbContextOptionsBuilder<AppDbContext> builder = new DbContextOptionsBuilder<AppDbContext>();

            builder.UseSqlServer(
                connectionString: Configuration.GetConnectionString("DefaultConnection"),
                sqlServerOptionsAction: sqlOptions => sqlOptions.MigrationsAssembly(GetType().Namespace));

            return new AppDbContext(builder.Options);
        }
    }
}

在同一个项目中,我还有一个appsettings.json文件:

{
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=.\\SQLEXPRESS;Initial Catalog=MyApp;User ID=sa;Password=SomethingSecret;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

在我的App.WebApi 项目中,我的Startup 类中有以下内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(ConfigureDatabaseOptions);
    services.AddMvc();
}

private void ConfigureDatabaseOptions(DbContextOptionsBuilder builder)
{
    builder.UseSqlServer("DefaultConnection", ConfigureSqlServerDatabaseOptions);
}

private void ConfigureSqlServerDatabaseOptions(SqlServerDbContextOptionsBuilder builder)
{
    builder.MigrationsAssembly(typeof(AppDbContextFactory).Namespace);
}

在同一个项目中,我还将连接字符串添加到appsettings.json

添加迁移有效。

Update-Database 抛出此错误:

System.ArgumentException:初始化字符串的格式不 符合从索引 0 开始的规范。

为什么?

【问题讨论】:

  • 不起作用不是问题陈述。到底发生了什么?
  • @CamiloTerevinto 很抱歉,我忽略了添加错误。帖子已更新。
  • 可能有答案的东西:stackoverflow.com/questions/9040266/…

标签: c# asp.net-core entity-framework-core


【解决方案1】:

解决了。我将“DefaultConnection”作为连接字符串而不是连接字符串 name:

private void ConfigureDatabaseOptions(DbContextOptionsBuilder builder)
{
    builder.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), ConfigureSqlServerDatabaseOptions);
}

【讨论】:

  • 有时,EF Core 可以通过使用 .UseSqlServer("name=DefaultConnection") 为您做到这一点
【解决方案2】:

我可以通过以下方式解决问题,为了理解解决方案,我放置了一个虚构的连接字符串的名称。解决办法

public void ConfigureServices(IServiceCollection 服务) { services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("ConnectionString"))); services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddMvc().AddJsonOptions(configureJson); }

【讨论】:

  • AppSetting.Json "ConnectionStrings": { "ConnectionString": "Server=Server;Database=Database;Trusted_Connection=True;MultipleActiveResultSets=true" },
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
相关资源
最近更新 更多