2016-06-19 7 views
3

ich meine App von ASPNET MVC RC1 in RC2 nach dem folgenden Video und Post am Migration:Entity Framework Core-Fehler nach RC2 in ASPNET MVC RC1 Migration

Bis jetzt habe ich es geschafft, meine App zum Kompilieren zu bringen, aber es bricht zur Laufzeit ab und zeigt den folgenden Fehler in Bezug auf Entity Framework:

Eine Ausnahme vom Typ 'System.InvalidOperationException' aufgetreten in Microsoft.EntityFrameworkCore.dll wurde aber nicht in Benutzercode behandelt

Zusätzliche Informationen: Ein Schlüssel kann nicht entfernen {Id} von Entitätstyp Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser , weil sie von verwiesen wird, ein Fremdschlüssel im Entitätstyp Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>. Alle Fremdschlüssel müssen entfernt oder neu definiert werden, bevor der referenzierte Schlüssel entfernt werden kann.

Unten ist der Code, den ich in der Kontextklasse bin mit:

public class AppContext : IdentityDbContext 
{ 
    public DbSet<Entity1> Entities1 { get; set; } 
    public DbSet<Entity2> Entities2 { get; set; } 
    public DbSet<Entity3> Entities3 { get; set; } 
    public DbSet<ApplicationUser> ApplicantionUsers { get; set; } 

    public AppContext(DbContextOptions<AppContext> options) : base(options) 
    { 
     ChangeTracker.AutoDetectChangesEnabled = false; 
     Database.EnsureCreated(); 
    } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlServer("the connection string..."); 
     base.OnConfiguring(optionsBuilder); 
    } 
} 

Die Code Brüche im AppContext Konstruktor (erste Zeile). Ich habe versucht, diese Zeile zu entfernen, aber es bricht in der nächsten Zeile. Wenn ich die DbSets entferne, läuft der Code durch, aber die Tabellen werden nicht erstellt.

Ich habe versucht, eine öffentliche String-ID-Eigenschaft der ApplicationUser-Klasse hinzuzufügen (obwohl es von IdentityUser erben sollte), aber den gleichen Fehler erhalten. Unten ist der Code für die ApplicationUser Klasse:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace AppNamespace 
{ 
    public class ApplicationUser : IdentityUser 
    { 
     public enum Gender { Male, Female } 

     public enum UserStatus { Inactive, Active } 

     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Passport { get; set; } 

     public Gender Gender { get; set; } 
     public DateTime Birthday { get; set; } 
     public UserStatus Status { get; set; } 
     public int ReferenceNumber { get; private set; } 
     public int Referral { get; set; } 
     public bool AcceptedTermsAndConditions { get; set; } 

     public string Telephone { get; set; } 
     public string Mobile { get; set; } 

     public string AddressLine { get; set; } 
     public string ZipCode { get; set; } 
     public string City { get; set; } 
     public string State { get; set; } 
     public Country Country { get; set; } 

     public ApplicationUser() 
     { 
     } 
    } 
} 

Danke, Gonzalo

+1

DNX ist in RC2 gegangen. Sie müssen 'dotnet' verwenden – Pawel

+0

Ja, das stimmt. Ich habe versucht, dnx, weil dotnet keine Entity Framework-Befehle hat. Mein Hauptproblem ist die "Schlüssel {'Id'} vom Entitätstyp kann nicht entfernt werden, aber ich verstehe nicht, warum das passiert. Ich verwende DbSet in meinem Kontext, vielleicht muss ich das ändern ..? – gmesorio

+0

Ich werde meine Frage bearbeiten, um den Kontext-Code hinzuzufügen und entfernen Sie über DNX, wie ich denke, es wird dazu beitragen, die Beschreibung zu verbessern – gmesorio

Antwort

0

Ok, war das Problem, dass der Kontext den ApplicationUser nicht zur Verfügung stellt, wenn sie von IdentityDbContext abzuleiten. Dies behebt das Problem:

public class AppContext : IdentityDbContext<ApplicationUser> 
{ 
    ... 
} 
Verwandte Themen