2011-08-08 9 views
8

Właśnie zaktualizowałem do najnowszej wersji EF 4.1 przy użyciu NuGeta, a teraz otrzymuję błąd dotyczący mojego mapowania.EF 4.1 EntityType nie ma klucza - kompozyt

mam tej klasy

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

i otrzymuję ten błąd:

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. 

mogę jednak, że praca przy użyciu Fluent API jak ten

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

Jak to się stało EF nie odbiera klucza złożonego, który zdefiniowałem za pomocą adnotacji? Jestem przekonany, że działało to przy starszej wersji EF 4.1.

+0

ten sam problem jak ty Czy kiedykolwiek znaleźć rozwiązanie – Pandincus

+0

nie, nie zrobiłem W końcu zdecydowałem się zdefiniować wszystkie klawisze z wykorzystaniem DbModelBuilder – kfuglsang

+0

sam problem, zabawną częścią jest to, że mam dwa klasy z kluczem kompozytowym, jeden kompiluje, drugi nie. –

Odpowiedz

1

Działa z Entity Framework 6.1.3. Dodałem też podstawowe Application klasę, ale wykorzystał UserApplication jak jest (z wyjątkiem DatabaseGenerat ed Opcja ta SQL została wygenerowana..

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]) 
) 
2

mam rozwiązany problem Właśnie dodałem dodatkowy Główne kolumny:.?..

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

Nie jestem pewien, czy to naprawdę odpowiada na pytanie. –