这是一个有趣的问题。有没有办法使用 LINQ to SQL 编写一些代码,它能够执行表更新,只知道给定的表包含列 x、y、z,但在编译时不知道它正在处理哪个表?
我的数据库模式中有几个表共享一些列,我需要应用一个基于集合的 UPDATE 操作,无论我们正在处理哪一个表,它的逻辑过程都是相同的。
这是一个简单的例子:假设您有 3 个实现邻接模型层次结构的表(即每行包含一个主键 ID 和一个自引用父 ID 列)。每个表还有一个“禁用”布尔标志。当我禁用任何这些实体的实例时,它应该通过子项级联,即
UPDATE MyTable SET Disabled = 1 WHERE ID = @ID 或 Parent_ID = @ID
我不想为每个实体编写这种 LINQ 语句,它违反了 DRY。这个例子可能看起来微不足道,但随着例子变得越来越复杂,你复制的代码数量也越来越多。我确信使用接口和泛型必须是可能的,但我正在努力想出一个优雅的解决方案。