Я мигрирующей мое приложение из 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()
{
}
}
}
Спасибо, Гонсало
dnx отсутствует в RC2. Вам нужно использовать 'dotnet' – Pawel
Да, это правда. Я попробовал dnx, потому что у dotnet нет команд инфраструктуры сущности. Моя основная проблема - «Невозможно удалить ключ {« ИД ») из типа сущности», но я не понимаю, почему это происходит. Я использую DbSet в моем контексте, может быть, мне нужно изменить это ...? –
gmesorio
Я отредактирую свой вопрос, чтобы добавить код контекста и удалить его о dnx, так как я думаю, что это поможет улучшить описание. – gmesorio