我有一个带有聚集索引的连接表
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}}
有关此问题的任何解决方法吗?
答案 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])
);