我在我的项目中使用EntityFramework 6,该项目使用AuditLog表跟踪多个其他表中的更改(简单地说,我将它们命名为T1,T2 ,. T5没有这个细节)。 AuditLog表中的每个记录都用于其他表(T1,... T5)中的一个。所以这对于很多关系来说是[0..1]。在EntityFramework中使用独立协会实现“通用”外键
我不想使用基于标准FK约束的关联,因为它会在AuditLog表中引入5个FK,并且每个记录的5个FK列中有4个为空。我想使用AuditLog表中的“公共”列作为其他表的“公共”FK,此FK列中的值可以是5个表中的一个的主键。其结果是,对于审计日志表生成以下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列与其他表的主键。
有没有办法我可以使用独立的关联,但也维护审核日志entityId中的其他表的主键?
你是对发现的一些博客文章。我原来的想法是行不通的。在阅读您在EF Audit上建议的帖子后,我放弃了FK关联,并覆盖SaveChanges()以管理“EntityId”的值。感谢您的建议。 – user3333649