2017-02-25 29 views
2

我对asp.net核心开发绝对陌生。我试图创建一个简单的asp.net核心web api与单个模型和mysql来存储模型数据,然后我想要检索它作为REST API可能使用Swagger。asp.net核心/ EF-Core mysql更新数据库错误

我的当前设置看起来像以下:

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; } 
    } 

} 

Project.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其中创建迁移文件夹(我想这意味着它是成功的)。之后,我执行了dotnet ef database update这给我错误:Format of the initialization string does not conform to specification starting at index 0

什么是布莱恩错?

回答

3

更改与ConfigureServices梅索德代码:

services.AddDbContext<WebAPIDataContext>(options => 
    options.UseMySQL(Configuration.GetConnectionString("SampleConnection")) 
); 
  • Configuration.GetConnectionString("SampleConnection")返回连接字符串服务器=本地主机;用户ID =根; PWD =根;港口= 3306;数据库= asptest; sslmode =无;你设置在appsettings.json,
  • options.UseMySQL("SampleConnection")会尝试解释文学SampleConnection作为连接字符串。
+0

我刚试过这个,但它给了我'System.NotImplementedException:该方法或操作未实现。在MySQL.Data.EntityFrameworkCore.Migrations.MySQLHistoryRepository.get_ExistsSql()'错误。 – Nitish

+0

@Nitish现在你的配置连接是好的。您现在有一个迁移问题。我想这个问题来自您创建的_initial_迁移。尝试使用'dotnet ef migrations remove initial'来重置您的迁移,然后重新创建 - 更新架构。 –

+0

因此,为了更安全的一面,我简单地删除了Migrations文件夹,并在我的软件包管理器控制台中执行了:'Add-Migration Initial'> Migrations文件夹被再次创建>然后我运行'Database-Update -Context WebAPIDataContext',并且再次得到相同的错误。我看到这篇文章:http://stackoverflow.com/questions/39640072/dot-net-entity-framework-database-update-doesnt-create-tables-in-mysql-database它对我的情况有帮助吗? – Nitish