【发布时间】:2014-02-21 18:20:02
【问题描述】:
我在我的项目中使用 EntityFramework 6,它使用 AuditLog 表来跟踪多个其他表中的更改(简单地说,我将它们命名为 T1、T2、... T5 而不详细说明)。 AuditLog 表中的每条记录都用于另一个表中的一个(T1,... T5)。所以它是 [0..1] 对多的关系。
我不想使用基于标准 FK 约束的关联,因为它会在 AuditLog 表中引入 5 个 FK,并且每条记录的 5 个 FK 列中有 4 个为空。我想使用 AuditLog 表中的“common”列作为其他表的“common” FK,此 FK 列中的值可能是 5 个表之一的主键。结果为 AuditLog 表生成如下 SQL:
CONSTRAINT [FK_AuditLogT1] FOREIGN KEY ([EntityId]) REFERENCES [dbo].[T1] ([Id]),
CONSTRAINT [FK_AuditLogT2] FOREIGN KEY ([EntityId]) REFERENCES [dbo].[T2] ([Id]),
CONSTRAINT [FK_AuditLogT3] FOREIGN KEY ([EntityId]) REFERENCES [dbo].[T3] ([Id]),
CONSTRAINT [FK_AuditLogT4] FOREIGN KEY ([EntityId]) REFERENCES [dbo].[T4] ([Id]),
CONSTRAINT [FK_AuditLogT5] FOREIGN KEY ([EntityId]) REFERENCES [dbo].[T5] ([Id])
在运行时,当应用添加类型为 T1(或 T2...T5)的新对象时,EF 将由于 FK 约束抛出以下异常:
异常:INSERT 语句与 FOREIGN KEY 约束“FK_AuditT2”冲突。数据库“xxxx”中发生冲突, 表“dbo.T2”,列“Id”。
我尝试过使用独立关联来映射AuditLog和其他表的关系,也不例外,但是EF不会用其他表的主键自动填充AuditLog表中的entityId列。
有没有办法既可以使用独立关联又可以维护 AuditLog 中 entityId 中其他表的主键?
【问题讨论】:
标签: c# entity-framework