我正在使用Entity Framework 6.1.3和数据库第一种方法。
这是一个小型数据库,在Tags和BoxedItems之间有多对多关系,名为ItemsTags的表保存着这种关系。
使用scaffolded代码删除BoxedItem时出现异常:
db.BoxedItems.Remove(boxedItem);
db.SaveChanges();
SqlException:DELETE语句与REFERENCE冲突 约束" FK_ItemsTags_Items"。冲突发生在数据库中 " TimeBox",table" dbo.ItemsTags",column' IdItem'。
关系表代码如下。 BoxedItem的PK需要是Guid,而Tags是INT IDENTITY(1,1)。
CREATE TABLE [dbo].[ItemsTags] (
[IdItem] UNIQUEIDENTIFIER NOT NULL,
[IdTag] INT NOT NULL,
CONSTRAINT [PK_ItemsTags] PRIMARY KEY CLUSTERED ([IdItem] ASC, [IdTag] ASC),
CONSTRAINT [FK_ItemsTags_Tags] FOREIGN KEY ([IdTag]) REFERENCES [dbo].[Tags] ([Id]),
CONSTRAINT [FK_ItemsTags_Items] FOREIGN KEY ([IdItem]) REFERENCES [dbo].[BoxedItems] ([Id])
);
如果我的BoxedItem PK是INT IDENTITY(1,1),EF自动生成的代码是否可以开箱即用?对于自动生成的代码,EF似乎更喜欢它。
除了自定义SQL指令之外,还有更聪明的方法可以删除BoxedItem吗?