使用 LINQ to SQL,其中数据库表可以有额外的列

Posted

技术标签:

【中文标题】使用 LINQ to SQL,其中数据库表可以有额外的列【英文标题】:Using LINQ to SQL where database tables can have extra columns 【发布时间】:2012-02-28 03:01:09 【问题描述】:

我们的开发团队希望在我们的数据访问层中使用 LINQ to SQL。我们遇到的一个问题是,我们正在访问的 SQL Server 数据库有时会在某些表中包含额外的列。这种变化是有限的,因此我们最多需要考虑 5 个额外的可选列。

我们意识到我们可以创建 5 个数据上下文,一个用于存在可选列的每种情况,一个用于使用正确列的开关。但这似乎有点沉重。

有谁知道我们可以继续使用 LINQ to SQL 的一种方法,但具有一定的可扩展性,以便我们可以使用一个数据上下文而不是 5 个?

注意:我们无法控制数据库架构,因为它归第三方所有。否则,我们总是会在这些表中包含额外的列。

【问题讨论】:

“附加”的意思是,在多个单租户场景中,有时列会存在,有时它们根本不存在? 这些列是否曾经参与过您在数据上下文中关心的外键? L2S 不会喜欢那样...或者:使用 blob/clob/extra-table 获取其他数据 @David,额外的列相当稳定。创建数据库时,它们可能会添加到数据库中。一旦到了那里,他们就永远不会离开。 @jklemmack,是的,它们与其他表相关,但我们可以取消外键关系以支持可扩展的数据上下文 【参考方案1】:

我们的开发团队认为这不适用于 LINQ。所以我们改用 ADO.NET SqlCommands,编写我们自己的 SQL 而不是让 LINQ 生成它。这使我们能够在存在额外列时灵活地更改 SQL,同时保留单个数据层类而不是五个。

【讨论】:

以上是关于使用 LINQ to SQL,其中数据库表可以有额外的列的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ To SQL / SQL CE 创建表

LINQ to SQL查找以另一个表中的字符开头的值

使用 LINQ to SQL 访问系统数据库/表?

使用 Linq to sql 从两个表中获取所有数据

使用 LINQ to SQL 时如何指定/过滤应填充哪些表列?

LINQ to SQL模型 是啥意思