实体框架:定义查询错误

时间:2013-12-04 02:57:08

标签: .net sql linq entity-framework entity-framework-5

我有一个带有聚集索引的连接表

CREATE TABLE [dbo].[MeetingTags] (
    [MeetingId] INT NOT NULL,
    [TagId]     INT NOT NULL,
    CONSTRAINT [FK_MeetingTags_Tags] FOREIGN KEY ([MeetingId]) REFERENCES [dbo].[Meetings] ([Id]),
    CONSTRAINT [FK_Tags_MeetingTags] FOREIGN KEY ([TagId]) REFERENCES [dbo].[Tags] ([Id])
);

GO
CREATE CLUSTERED INDEX [cdxMeetingTags]
    ON [dbo].[MeetingTags]([MeetingId] ASC, [TagId] ASC);

显然,它有会议和标签表的共同字段,以便我可以通过这种方式添加记录

var tag= new Tag()
{
  Title = "Meeting Title",
};

meeting.Tags.Add(tag);

看起来不错,但是在插入新的标记记录时我在Context.SaveChanges()收到此错误。

Unable to update the EntitySet 'MeetingTags' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation

标签有主键。

我认为在MeetingTags中放置主键是不可能的,因为它会破坏EF中会议和标签的多对多关系,并且还会在Meeting.MeetingTags.Tags中添加Meeting.Tags语法而不仅仅是{{1}}

有关此问题的任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

结果创建复合主键并保留FK约束是可能的,并解决了我的问题。

CREATE TABLE [dbo].[MeetingTags] (
    [MeetingId] INT NOT NULL,
    [TagId]     INT NOT NULL,
    CONSTRAINT PK_UserGroup PRIMARY KEY NONCLUSTERED ([MeetingId], [TagId]),
    CONSTRAINT [FK_MeetingTags_Tags] FOREIGN KEY ([MeetingId]) REFERENCES [dbo].[Meetings] ([Id]),
    CONSTRAINT [FK_Tags_MeetingTags] FOREIGN KEY ([TagId]) REFERENCES [dbo].[Tags] ([Id])
);