2011-08-08 104 views
8

我刚刚升级到最新的EF 4.1代码优先使用的NuGet现在我收到关于我的映射错误。EF 4.1的EntityType没有密钥 - 复合

我有这个类

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. 

我可以然而使它工作使用这样

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

的流畅API怎么来EF不拿起我已经使用注释定义组合键? 我敢肯定,这与使用旧的EF 4.1工作。

+0

有你你有没有找到一个解决同样的问题 – Pandincus

+0

不,我没有在最后,我决定来定义所有使用DbModelBuilder – kfuglsang

+0

同样的问题的关键,有趣的部分是我有两个类复合键,一个汇总,其他没有.. –

回答

1

作品与实体框架6.1.3。我还添加了基本Application类,但所用的UserApplication的是(除了DatabaseGenerat 选项生成该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]) 
) 
2

我已经解决了问题,我刚刚加入额外的键列:?。

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

我是个问题不知道这真的回答了这个问题。 –

相关问题