Entity Framework 4.3.1 - > 5.0 исключение: "EntityType не имеет определенного ключа. Определите ключ для этого EntityType."

в Entity Framework 4.3.1 у меня были следующие модели, и они отлично работали:

public class BaseUser
{
    [Key]
    [MaxLength(100)]
    public string Username { get; set; }
}

[Table("AppUser")] // Ensures EF Code First uses Table-per-Type
public class AppUser : BaseUser
{
    [MaxLength(200)]
    public string About { get; set; }
}

после обновления до EF 5.0 я получаю следующее исключение при попытке запустить это приложение и получить доступ к связанному DbContext:

EntityType 'AppUser' has no key defined. Define the key for this EntityType.

Как решить эту проблему? Это похоже на регрессию.

1 ответов


это исключение вызвано смешиванием версий EF.

BaseUser был определен в общем проекте, использующем EF 4.3.1. AppUser был в проекте с использованием EF 5.0. Это запутанное исключение является результатом попытки наследовать от модели в проекте, который не был обновлен до EF 5.0. Разделение общего проекта и обновление упомянутого здесь проекта решили проблему.

если другие сталкиваются с этим, стоит отметить, что обновление немного неудобно. Начиная С NuGet кажется, не замечает необходимости обновления, он позволяет вам установить EF 5.0 поверх него, перечисляет новую версию как 4.4 после установки и требует, чтобы вы включили оба следующих оператора using в свои классы модели, так как некоторые из аннотаций данных EF были перемещены (перенаправлены), а некоторые не были:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;