【发布时间】:2013-01-21 16:53:35
【问题描述】:
我有多个公司访问我的应用程序的单个实例的情况,但我需要隔离他们的数据以避免意外加载另一家公司的数据,并简化每个公司的数据库备份。
理想情况下,我想将数据拆分到不同的数据库中,如下所示:
一个 SQL Server 数据库,用于列出所有用户,以及 所有用户/公司通用的任何表格
N 个公司特定数据库,每个数据库具有相同的架构,但每个公司的数据不同。登录时,我会为特定用户的公司动态选择数据库
我希望能够查询公司特定的数据表,但要对共享数据库执行连接(例如,我可以在公司数据库表中存储一个外键,它连接到一个其他数据库中的共享表)。
我发现了看起来可以完成这项工作的 SQL Server 同义词,而且我似乎可以通过使用 SQL Server Management Studio 中的查询成功地连接两个数据库。
是否可以在 Entity Framework Code First 中使用同义词表,如果可以,我的 POCO 类/DbContext 需要是什么样的?
谢谢:)
【问题讨论】:
-
无论您是否使用同义词,您都无法在数据库之间创建外键,所以我不相信他们可以“完成这项工作”。请参阅:stackoverflow.com/questions/1424327/… 如果您不需要显式的外键关系,那么您不能将本地表加入到
centraldatabase.dbo.table,而不是到处创建同义词吗?或者 EF 根本不允许你跨数据库加入? -
我没有意识到您可以在没有同义词的情况下直接连接两个数据库 - 我以前从未需要过,但这很有用。关于不能使用外键的一个公平点,我想这永远不会奏效 - 但即使没有明确的关系,如果我能让 EF 支持这一点,它仍然可能是一种前进的方式。据我所知,代码优先 EF 仅支持单个数据库连接,并且将同义词作为表引用是行不通的。
-
据我所知,如果您的项目不符合该模型的严格参数,这不是您遇到的最后一个 EF/CF 限制。 EF/CF 是您必须使用的东西,还是因为它“风靡一时”而使用它?我怀疑如果你想做任何适度复杂的事情,你很快就会对它的所有界限感到沮丧并寻求其他选择。
-
您是否考虑过将共享数据库中的数据暴露给(并通过)客户特定数据库的视图?
-
@AaronBertrand - Fair cmets,从我目前的经验来看,我倾向于同意。我们不需要在这个项目中使用 EF,但觉得这是一个值得尝试的练习。似乎有它的优点和缺点 - 我喜欢它如何消除编写数千行 CRUD 的要求,处理与域对象之间的映射,以及使用 LINQ 进行查询很棒(尤其是它能够获取分层结果) .但我不喜欢魔法/失去控制的数量。还尝试了telerik.com/products/orm.aspx,它似乎有更好的工具。
标签: sql-server entity-framework code-first synonym