【发布时间】:2009-11-24 23:02:00
【问题描述】:
在我的数据库设计中,我倾向于使用表的“集群”。这些集群通常支持一个应用程序或一组功能紧密相关的应用程序。通常,这些集群还通过相对较少数量的外键相互关联;这有助于业务中原本独立的应用程序相互集成。
例如:假设我有应用程序“Foo”、“Bar”和“Baz”,每个应用程序都有几个表。以下是表及其外键引用的列表:
- FooTableOne
- FooTableTwo -> FooTableOne
- BarTableOne -> FooTableTwo
- BarTableTwo -> BarTableone
- BazTableOne
- BazTableTwo -> FooTableTwo,BazTableOne
目前,我正在使用 LINQ-to-SQL 来访问这些表。我对每个集群(Foo、Bar 和 Baz)都有一个单独的项目,并且每个项目都有一个用于集群中所有表的 .dbml。这里的想法是,使用集群的每个(一个或多个)应用程序都可以导入一个共享库,其中包含它需要的 LINQ 类。
这可能是一个好主意,也可能不是一个好主意;它看起来像juryisstillout。我真正想知道的是,我是否可以拥有由另一个集群中的类表示的集群之间的引用,即使它们存在于不同的上下文类中。 (更具体地说,如何在 Visual Studio 中创建这种关系)。
回到这个例子,我想要:
- 富项目
- Foo.dbml
- FooDataContext
- FooTableOne
- FooTableOne.FooTableTwos
- FooTableTwo
- FooTableTwo.FooTableOne
- FooTableTwo.BarTableOnes(这个没那么重要)
- FooTableTwo.BazTableTwos(这个没那么重要)
- 项目栏
- Bar.dbml
- BarDataContext
- BarTableOne
- BarTableOne.FooTableTwo
- BarTableOne.BarTableTwos
- BarTableTwo
- BarTableTwo.BarTableOne
- 巴兹计划
- Baz.dbml
- BazDataContext
- BazTableOne
- BazTableOne.BazTableTwos
- BazTableTwo
- BazTableTwo.FooTableTwo
- BazTableTwo.BazTableOne
在门外,所有对上下文外实体的引用都是简单的 ID (int),而不是对象,而且对上下文外实体的集合根本不存在。我知道我可以将自己的方法添加到这些类中以进行适当的查找(给定上下文的实例),但我想让事情变得更加精简和一致。
请注意,通过上下文/集群的这种分离,我获得了应用程序之间的模块化。因此,例如,Baz 应用程序只需导入 Baz 和 Foo 上下文(因为 Baz 依赖于 Foo),而不是 Bar。 (这假设我在 Foo 中没有 Bar 实体的集合,这对我来说很好)。这是一件好事,但并不重要:如果 LINQ/VS 不能让这变得简单,那么我会考虑放弃模块化并使用单一上下文。
【问题讨论】:
标签: linq visual-studio linq-to-sql modularity