Ich bin absolut neu in der Kernentwicklung von asp.net. Ich versuche, eine einfache asp.net Core Web API mit einem einzigen Modell und MySQL zu erstellen, um die Modelldaten zu speichern, und dann möchte ich es als REST API möglicherweise mit Swagger abrufen.
Mein derzeitiges Setup sieht folgendermaßen aus:
Bücher.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; }
}
}
Projekt.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"
}
}
}
Und in meinem Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddDbContext<WebAPIDataContext>(options =>
{
options.UseMySQL("SampleConnection");
});
services.AddMvc();
}
Nach dieser Menge von Setup, habe ich alle Pakete wiederhergestellt und dotnet ef migrations add initial
erstellt Migrations Ordner (ich denke, es bedeutet, dass es erfolgreich war). Danach habe ich dotnet ef database update
ausgeführt, was mir einen Fehler gibt: Das Format of the initialization string does not conform to specification starting at index 0
Was geht falsch?
Ändern Sie Ihren ConfigureServices-Methodencode mit:
services.AddDbContext<WebAPIDataContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("SampleConnection"))
);
Configuration.GetConnectionString("SampleConnection")
gibt die Verbindungszeichenfolge server = localhost; userid = root; pwd = root; port = 3306; datenbank = asptest; sslmode = none; Sie setzen in appsettings.json, options.UseMySQL("SampleConnection")
würde versuchen, literaly SampleConnection als eine Verbindungszeichenfolge zu interpretieren.