【问题标题】:asp.net core/EF-Core mysql update database errorasp.net core/EF-Core mysql更新数据库错误
【发布时间】:2017-02-25 20:05:16
【问题描述】:

我对 asp.net 核心开发完全陌生。我正在尝试使用单个模型和 mysql 创建一个简单的 asp.net 核心 web api 来存储模型数据,然后我想使用 Swagger 将其作为 REST API 检索。

我目前的设置如下:

Books.cs:

using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace New_Api.Models
{
    public class Book
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Author { get; set; }
        public decimal Price { get; set; }
        public DateTime CreatedOn { get; set; } = DateTime.UtcNow;

    }

    public class WebAPIDataContext : DbContext
    {
        public WebAPIDataContext(DbContextOptions<WebAPIDataContext> options)
            : base(options)
        {
        }
        public DbSet<Book> Books { get; set; }
    }

}

项目.json:

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
    },
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.EntityFrameworkCore": "1.0.0",
    "MySql.Data.Core": "7.0.4-IR-191",
    "MySql.Data.EntityFrameworkCore": "7.0.4-IR-191",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

appsettings.json:

{

    "ConnectionStrings": {
      "SampleConnection": "server=localhost;userid=root;pwd=root;port=3306;database=asptest;sslmode=none;"
    },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

在我的 startup.cs 中:

 public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddApplicationInsightsTelemetry(Configuration);
            services.AddDbContext<WebAPIDataContext>(options =>
            {
                options.UseMySQL("SampleConnection");
            });

            services.AddMvc();
        }

在设置了这么多之后,我恢复了所有的包并执行了dotnet ef migrations add initial,它创建了 Migrations 文件夹(我猜这意味着它成功了)。之后我执行了dotnet ef database update,这给了我错误:Format of the initialization string does not conform to specification starting at index 0

出了什么问题?

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc entity-framework-core


    【解决方案1】:

    更改您的 ConfigureServices 方法代码:

    services.AddDbContext<WebAPIDataContext>(options =>
        options.UseMySQL(Configuration.GetConnectionString("SampleConnection"))
    );
    
    • Configuration.GetConnectionString("SampleConnection") 返回您在 appsettings.json 中设置的连接字符串 server=localhost;userid=root;pwd=root;port=3306;database=asptest;sslmode=none;
    • options.UseMySQL("SampleConnection") 会尝试将SampleConnection字面解释为连接字符串。

    【讨论】:

    • 我刚试过,但它给了我System.NotImplementedException: The method or operation is not implemented. at MySQL.Data.EntityFrameworkCore.Migrations.MySQLHistoryRepository.get_ExistsSql() 错误。
    • @Nitish 现在您的配置连接良好。您现在遇到了迁移问题。我想问题来自您创建的 initial 迁移。尝试使用 dotnet ef migrations remove initial 重置您的迁移,然后重新创建-更新架构。
    • 所以为了安全起见,我只是删除了 Migrations 文件夹,然后在我的包管理器控制台中做了:Add-Migration Initial > Migrations 文件夹再次创建 > 然后我运行 Database-Update -Context WebAPIDataContext 并再次遇到相同的错误。我看到了这个帖子:stackoverflow.com/questions/39640072/… 对我有帮助吗?
    • 但是,数据库已经创建了一个表_efmigrationshistory
    • @Nitish 不幸的是,所描述的问题是您的问题。您唯一可以做的事情是 1. 检查您的版本是否为 7.0.6-IR31 否则 2. 您可以使用另一个包 SapientGuardian.EntityFrameworkCore.MySql (链接中 Careuno Merchan 的建议)。如果这些都不起作用,您将不得不等待稳定版本。根据您的需要,您可能希望切换数据库并使用 SQL Server 2016 或 SQL Local DB。您可以在您的开发计算机上免费安装它们,到目前为止,我对 .NET Core 没有任何问题。
    猜你喜欢
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多