我刚刚使用NuGet升级到最新的EF 4.1代码,现在我收到有关映射的错误。
我有这个班级
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。
答案 0 :(得分: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 :(得分:1)
与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])
)