错误“EntityType没有定义密钥”复合键

问题描述:

我试图绑定我的数据使用实体框架v6.1.3,但我收到此错误消息EntityType没有定义密钥。为此EntityType定义密钥。 (我有一个复合键)错误“EntityType没有定义密钥”复合键

我尝试以下方法:

public class CommunicationCollection 
{ 
    [Key, Column(Order = 0)] 
    [ForeignKey("FK_CommunicationCollection_Communication")] 
    public Guid CommunicationId; 

    [Key, Column(Order = 1)] 
    [ForeignKey("FK_CommunicationCollection_Collection")] 
    public Guid CollectionId; 

} 

public class CommunicationCollection 
    { 
     [Key, Column(Order = 0)] 
     [ForeignKey("FK_CommunicationCollection_Communication")] 
     public Guid CommunicationId; 

     [Key, Column(Order = 1)] 
     [ForeignKey("FK_CommunicationCollection_Collection")] 
     public Guid CollectionId; 

     public virtual Communication Communication { get; set; } 
     public virtual Collection Collection { get; set; } 

    } 

而且这个

public class CommunicationCollection 
    { 
     [Key, Column(Order = 0)] 
     public Guid CommunicationId; 

     [Key, Column(Order = 1)] 
     public Guid CollectionId;  
    } 

,并在DB我有

CREATE TABLE [CommunicationCollection](
    [CommunicationId] [uniqueidentifier] NOT NULL, 
    [CollectionId] [uniqueidentifier] NOT NULL, 
CONSTRAINT [PK_CommunicationCollection] PRIMARY KEY CLUSTERED 
(
    [CommunicationId] ASC, 
    [CollectionId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [CommunicationCollection] WITH CHECK ADD CONSTRAINT [FK_CommunicationCollection_Collection] FOREIGN KEY([CollectionId]) 
REFERENCES [Collection] ([CollectionId]) 
GO 

ALTER TABLE [CommunicationCollection] CHECK CONSTRAINT [FK_CommunicationCollection_Collection] 
GO 

ALTER TABLE [CommunicationCollection] WITH CHECK ADD CONSTRAINT [FK_CommunicationCollection_Communication] FOREIGN KEY([CommunicationId]) 
REFERENCES [Communication] ([CommunicationId]) 
GO 

ALTER TABLE [CommunicationCollection] CHECK CONSTRAINT [FK_CommunicationCollection_Communication] 
GO 

任何想法我错过了什么? 非常感谢!

有了EF,一切都需要属性而不仅仅是'普通'变量。这是必要的,所以EF可以挂钩到这些方法中。

所以这样的:

public Guid CommunicationId { get; set; } 
public Guid CollectionId { get; set; } 

忘记这样做会导致各种问题,可能很难追溯至实际原因,正如你刚才遇到的。

+0

谢谢!它解决了我的问题 – WNB