我假设你问的是设计还是运行时模式。我一般会说否:
尽管可能将数据库分割成多个数据上下文,但如果并且仅当两个上下文之间没有重叠时,这才是可取的。
重叠是为
例如你有一个WebsiteContext
和一个AdminContext
。 WebsiteContext
用于显示Product
并履行Order
s。 A WebsiteUser
附加到Order
。 AdminContext
用于您的Staff
会员处理退款Orders
,其中也参考WebsiteUser
。 AdminContext
还需要重置密码并更新WebsiteUser
的其他详细信息。
你想这样做的,因为你不想要的网站来处理,甚至不知道有关Returns
WebsiteContext
Product -- Order -- WebsiteUser
AdminContext
Staff -- Returns -- Order -- WebsiteUser
在上面,我们可以看到我们在不同的数据复制许多对象上下文。这听起来很糟糕,它确实表明人为地将数据库分成不同的数据上下文是一个错误的决定。你有没有> 2个数据库,或只有一个?这种重复违反了DRY原则(不要重复自己),因为WebsiteContext.WebsiteUser与AdminContext.WebsiteUser不同,很可能代码在需要关心他们引用哪个的时候会变得混乱。
LINQ的数据上下文只是一个OR映射器,并且需要被当作一个奇特的黑盒子,使得写一些数据访问代码更容易。一些linq演示使它看起来像不再需要其他层,但任何复杂程序仍然受益于分层设计。
将Linq对象视为仅用于轻松传输数据的对象,并创建一个将其隐藏为实现细节的Domain层即可。阅读DDD - 领域驱动设计。
就其本身而言,仅使用UI中的Linq对象最类似于Transaction Script
模式。在这种情况下,您仍然可以从具有处理细节的逻辑层中受益。
虽然您可能不希望上下文的责任如此宽泛,但数据上下文只是数据库的表示。这不是一种安全机制,它不能阻止你破坏数据。
http://stackoverflow.com/questions/226127/multiple-single-instance-of-linq-to -sql-datacontext – spender 2009-02-18 02:27:28