【问题标题】:Asp.net MVC3 with LINQ to SQL on multiple identical tables在多个相同表上使用 LINQ to SQL 的 Asp.net MVC3
【发布时间】:2011-07-19 08:22:48
【问题描述】:

我使用 mvc3 和 linq 2 SQL 从已填充的实时数据库表中成功检索数据。该表在 DataClasses1.dbml 中定义。

现在我必须从具有相同结构的 DataClasses1 的其他表中检索数据,但从同一 SQL Server (DB1.Customers DB2.Customers ecc) 上的不同数据库中检索数据,并按数据库名称分组显示。

1) 我如何在不创建 N DataClassesN.dbml 的情况下做到这一点?我想因为它是相同的表结构,所以我可以避免这样做。

2)(可选):如何自动从新创建的数据库的表中检索数据?

3) (不相关):如何定义强类型视图?似乎我可以使用 EF 做到这一点,但我不能使用 LINQ 2 SQL 做到这一点。

  • 我已经想过在数据库上创建一个包含所有客户表的视图,但它似乎太重了!

  • 我有一个返回所有数据库名称的查询(Select name from master..syttables),有用吗?

提前致谢

【问题讨论】:

  • 您应该重新考虑您的数据库设计。如果此数据由单个应用程序使用,具有一致的结构,并且您希望将其作为单个数据类型使用,那么它应该全部存在于 oneone 表中> 数据库。如有必要,添加一列以确定它属于哪个“子集”。
  • @Kirk Broadhurst - 不想这样做的原因有很多。例如,我开发了一个有多个客户的应用程序,每个客户在离开时都需要能够“随身携带数据”,因此这需要让每个客户使用自己的数据库。从程序员的角度来看最好的东西并不总是从商业角度来看是最好的。
  • @Mystere Man - 在我看来,“获取他们自己的数据”并不足以提供他们自己的数据库。有 200 个客户需要 200 个数据库?那是无法维护的。

标签: asp.net linq linq-to-sql asp.net-mvc-3 scaffolding


【解决方案1】:

您只需在创建数据上下文时将不同的连接字符串传递给它。如果数据库确实相同,包括所有外键关系,则只需执行以下操作:

var dc = new DataClasses1(db1connectionstring);
// Do your display of database 1 data
var dc2 = new DataClasses1(db2connectionstring);
// Do your display of database 2 data

我不知道你所说的#2 是什么意思。数据不会自行检索。

【讨论】:

  • 他想要跨数据库对表进行分组、连接和分组。即使我们创建两个具有不同连接字符串的数据上下文对象是否可能
  • @Muhammad Adeel Zahid - 我已经阅读并重读了他的问题,但我没有看到他要求在哪里跨数据库加入或分组表。他只是询问对具有相同结构的不同数据库使用相同的数据类。当他说“按数据库名称分组”时,他只是表示他想列出数据库名称,然后显示该数据库中的数据,然后列出另一个数据库名称和该数据库中的数据。
  • 我认为@Attila 比我更适合谈论这个问题
  • re #2,我假设他的服务器中将有一个未知的数据库集合,并希望他的数据访问层动态地从每个数据库中检索数据。
  • 正是柯克·布罗德赫斯特,您知道我该怎么做吗?
【解决方案2】:

您显然不能在 SQL 中加入来自 2 个数据库的结果,因此您可能必须使用 2 个查询(每个数据库一个),其中一个选择到另一个数据库的新实体,然后将结果加入之后使用 LINQ 的内存。因此,一个查询返回 DB1.EntityName,另一个返回 DB2.EntityName,但通过选择将其映射到新的 DB1.EntityName 实体,然后将两者连接起来。这不是一个很好的解决方案,但这是我能想到的最好的解决方案。

如果您只是希望每个数据库都有一组结果,那么显然您可以只返回 2 个结果集。如果我误解了你的问题,请告诉我。

【讨论】:

  • 其实是的。您可以在 SQL 中执行跨数据库查询,将每个数据库中的表或结果连接到单个查询中。不过,在 EF 或 L2S 中执行此操作是另一回事。
  • 我的意思是从 EF 的角度来看。感谢您的澄清。从 EF 这将需要 2 个上下文连接,并且必须在之后合并结果。
猜你喜欢
  • 2017-10-23
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多