2011-08-08 32 views
8

Tôi vừa mới nâng cấp lên phiên bản EF 4.1 mới nhất bằng NuGet và bây giờ tôi nhận được lỗi liên quan đến ánh xạ của mình.EF 4.1 EntityType không có khóa - composite

Tôi có lớp này

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

Và tôi nhận được lỗi này:

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. 

Tôi tuy nhiên có thể làm cho nó hoạt động bằng cách sử dụng API thạo như thế này

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

Tại sao EF không nhận khóa tổng hợp mà tôi đã xác định bằng chú thích? Tôi khá chắc chắn rằng điều này được sử dụng để làm việc với một EF 4.1 cũ hơn.

+0

gặp vấn đề tương tự như bạn bạn đã bao giờ tìm thấy một giải pháp – Pandincus

+0

không, tôi không cuối cùng tôi quyết định để xác định tất cả các phím sử dụng DbModelBuilder cùng một vấn đề – kfuglsang

+0

, phần thú vị là tôi có hai các lớp học có khóa tổng hợp, một biên dịch, số còn lại không .. –

Trả lời

1

Làm việc với khung thực thể 6.1.3. Tôi cũng đã thêm một lớp cơ bản Application, nhưng sử dụng UserApplication như là (trừ DatabaseGenerat ed Lựa chọn SQL này được tạo:..

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

Tôi đã giải quyết vấn đề này Tôi vừa mới bổ sung thêm cột chính:.?..

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

Tôi không chắc điều này thực sự trả lời câu hỏi. –

Các vấn đề liên quan