EF 4.1 EntityType не имеет ключа - составной - PullRequest
8 голосов
/ 08 августа 2011

Я только что обновился до последней версии EF 4.1 с использованием NuGet, и теперь я получаю сообщение об ошибке в моем отображении.

У меня есть этот класс

public class UserApplication
{
    [Key, Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int UserId { get; set; }

    [Key, Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ApplicationId { get; set; }

    [ForeignKey("ApplicationId")]
    public virtual Application Application { get; set; }

    public DateTime SubscribedDate { get; set; }
}

И я получаю эту ошибку:

System.Data.Edm.EdmEntityType: : EntityType 'UserApplication' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: EntitySet 'UserApplications' is based on type 'UserApplication' that has no keys defined.

Однако я могу заставить его работать, используя Fluent API, вот так

modelBuilder.Entity<UserApplication>().HasKey(obj => new {obj.UserId, obj.ApplicationId });

Почему EF не берет составной ключ, который я определил с помощью аннотаций? Я совершенно уверен, что это раньше работало со старым EF 4.1.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2015

Я решил проблему.Я только что добавил дополнительные ключевые столбцы:

public class AlbumUser
{
    public Album Album
    {
        get;
        set;
    }

    public IdentityUser User
    {
        get;
        set;
    }

    [Key]
    [Column(Order = 0)]
    [StringLength(128)]
    public string UserId
    {
        get;
        set;
    }

    [Key]
    [Column(Order = 1)]
    public int AlbumId
    {
        get;
        set;
    }
}
1 голос
/ 04 июля 2015

Работает с Entity Framework 6.1.3.Я также добавил базовый класс Application, но использовал UserApplication как есть (за исключением опции DatabaseGenerat ed . Этот SQL был сгенерирован:

CREATE TABLE [dbo].[UserApplication] (
    [UserId] [int] NOT NULL,
    [ApplicationId] [int] NOT NULL,
    [SubscribedDate] [datetime] NOT NULL,
    CONSTRAINT [PK_dbo.UserApplication] PRIMARY KEY ([UserId], [ApplicationId])
)


CREATE TABLE [dbo].[Application] (
    [ApplicationId] [int] NOT NULL IDENTITY,
    [Name] [nvarchar](max),
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY ([ApplicationId])
)
...