2016-06-19 3 views
3

Я мигрирующей мое приложение из ASPNET MVC RC1 в RC2 после следующего видео и должность:Entity Framework Основная ошибка после переноса ASPNET MVC RC1 в RC2

До сих пор мне удалось получить мое приложение для компиляции, но оно ломается во время выполнения, отображая следующую ошибку, связанную с Entity Framework:

Исключение типа 'System.InvalidOperationException' произошло в Microsoft.EntityFrameworkCore.dll, но не был обработан в пользовательском коде

Дополнительная информация: Не удается удалить ключ {} Id от типа объекта Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUser , поскольку он ссылается внешний ключ в объекте типа Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>. Все внешние ключи должны быть удалены или переопределены до того, как указанная ссылка может быть удалена.

Ниже приведен код, я использую в классе контекста:

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

Кодовые перерывы в конструкторе (первый контекст приложения линия). Я попытался удалить эту строку, но она перерывается в следующем. Если я удалю DbSets, код пройдет, но таблицы не будут созданы.

Я попытался добавить свойство идентификатора публичной строки в класс ApplicationUser (несмотря на то, что он должен наследовать его от IdentityUser), но получил ту же ошибку. Ниже приведен код класса ApplicationUser:

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() 
     { 
     } 
    } 
} 

Спасибо, Гонсало

+1

dnx отсутствует в RC2. Вам нужно использовать 'dotnet' – Pawel

+0

Да, это правда. Я попробовал dnx, потому что у dotnet нет команд инфраструктуры сущности. Моя основная проблема - «Невозможно удалить ключ {« ИД ») из типа сущности», но я не понимаю, почему это происходит. Я использую DbSet в моем контексте, может быть, мне нужно изменить это ...? – gmesorio

+0

Я отредактирую свой вопрос, чтобы добавить код контекста и удалить его о dnx, так как я думаю, что это поможет улучшить описание. – gmesorio

ответ

0

Хорошо, проблема в том, что контекст не обеспечивая ApplicationUser при выводе из IdentityDbContext. Устранение неполадки:

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