2016-09-22 26 views
7

Używam bazy danych z oficjalnym dostawcą połączeń MySql. Próbuję go z następnym przykładzie projektu (rdzeń ASP.NET 1.0) na komputerze Mac:Aktualizacja bazy danych Dot Net Entity Framework nie powoduje utworzenia tabel w bazie danych mysql.

public class BloggingContext : DbContext 
{ 
    public BloggingContext(DbContextOptions<BloggingContext> options) 
     : base(options) 
    { } 

    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 
} 

public class Blog 
{ 
    public int BlogId { get; set; } 
    public string Url { get; set; } 

    public List<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public int PostId { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 

    public int BlogId { get; set; } 
    public Blog Blog { get; set; } 
} 

I w moim Startup.cs

public void ConfigureServices(IServiceCollection services) 
    { 
     var connection = @"server=localhost;userid=efcore;port=3306;database=blogsFinal;sslmode=none;"; 
     services.AddDbContext<BloggingContext>(options => options.UseMySQL(connection)); 

     // Add framework services. 
     services.AddMvc(); 
    } 

W moim project.json również dodać

"dependencies": { 
    ... 
    "MySql.Data.EntityFrameworkCore": "7.0.5-ir21", 

    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    } 
} 

i

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

Kiedy biegnę dotnet ef migrations add v1, działa dobrze i tworzy pliki migracji, ale kiedy wykonać dotnet ef database update baza danych zostanie utworzona, ale nie tabele i rzuca to wyjście

System.NotImplementedException: The method or operation is not implemented. 
    at MySQL.Data.EntityFrameworkCore.Migrations.Internal.MySQLHistoryRepository.get_ExistsSql() 
    at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists() 
    at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.GetAppliedMigrations() 
    at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration) 
    at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.DatabaseUpdateCommand.<>c__DisplayClass0_0.<Configure>b__0() 
    at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args) 
The method or operation is not implemented. 
+0

mógłbyś pisać kod, który jest wykonywany dla wspomnianej aktualizacji, która jest błąd rzucania? – A3006

+0

To jest kod [link] (https://github.com/careuno/newtestEfcoreMysql) błąd jest po wykonaniu aktualizacji bazy danych dotnet ef –

Odpowiedz

7

wyjątkami mówi ona. Oficjalny dostawca MySQL od Oracle nie obsługuje jeszcze migracji ani rusztowań.

Spowoduje to utworzenie bazy danych przy pierwszym uruchomieniu context.Database.EnsureCreated(). Wszelkie zmiany dokonane po tym, nie zostaną zastosowane. Musisz upuścić całą bazę danych i utworzyć nową, tracąc wszystkie dane.

Say dzięki Oracle;)

Aktualizacja

Wraz z wydaniem 7.0.6-IR31 package migracje wykonywać pracę, ale nadal nie rusztowania.

+3

Dziękuję, Z SapientGuardian.EntityFrameworkCore.MySql działa dobrze –

+0

Łącze do dokumentacji będzie być pomocnym. –

1

Jak powiedział Tseng, jest to znany problem. Oto raport o błędzie z 14 września 2016.

Brakujące wdrożenie do uruchamiania kodu EntityFramework rdzenia pierwszą migrację

http://bugs.mysql.com/bug.php?id=82981