2009-06-11 81 views
2

假设我有一个数据库,并且这个数据库有一组通用于所有客户端的表和一些特定于某些客户端的表。C#Linq:你可以合并DataContexts吗?

现在我已经记创建主DataContext只包括那些一般到所有客户端的表,然后创建一个只包含特定于客户端的表单独DataContext秒。


有没有办法来样,使之成为一个背景下“合并” DataContext S'因此对于客户端A,我需要一个DataContext,它包含一般表以及该特定客户端的表(从两个不同的DataContext s中检索)?


[更新]

我觉得我可以做的是,从DataContext的,而不是让我的DataContext从DataContext继承的部分I类使它从MyDataContext继承;这样,来自MyDataContext和另一个DataContext的表格将在一个DataContext类中提供。

您对这种方法有什么看法?当然,像这样的事情,你只能一次合并两个数据上下文,尽管...

回答

1

我不知道无论如何要实现这一目标。

您可能想要看的是使用设计模式来实现此目标。通过使用模式以及存储库模式,您可以定义所有客户端存储库将继承的基础接口存储库。然后,对于每个客户端存储库,都可以根据其特定需求进行扩展

2

我会使用一个Facade模式。创建一个Facade上下文,它将从用户中抽象出底层的DataContext。如果需要,可以从Default DataContext继承,并覆盖方法。在覆盖内,您可以将它传递给适当的DataContext。

+0

我会使用存储库的Facade模式进行抽象。通过传入外观您正在想要的存储库。但从我从OP那里收集到的信息来看,他想要合并,这样客户DC就会在一定程度上扩展基础DC所提供的功能。 这两种模式都提供了一个可行的方向。 – 2009-06-11 14:18:55

0

我不知道你是否已经知道了这一点,但合并DataContexts不是一个好主意。原因的很大一部分与DataContext对象中内置的更改跟踪有关。如果您能够将实体对象分开,以便更改每次只影响一个DataContext而不会重叠,则可以使其工作,但这似乎很麻烦,因为这么少的回报。

您可以实现存储库模式,但是您仍然遇到一个DataContext无法识别使用另一个DataContext创建的对象的问题。我目前正在使用的项目只使用一个DataContext。该数据库现在有大约75个表格......我有一对一,一对多和多对多的关系,并且我只用一个DataContext就没有遇到严重的性能或实现问题。使用门面模式可能会起作用,但同样需要问问自己,是否维护无法直接交互的多个DataContext是值得的。

例如,假设您有一个Customer表和Orders表。 Customer表驻留在一个DataContext中,Orders表驻留在另一个中。这种关系是一个客户对零订单。因为你有他们在单独的DataContexts,我不相信你可以直接引用你的查询中的子实体对象。因此,要获得订单为特定的客户,你可能被迫这样做:

​​

,而不是这样的:

var orders = DC.Customers.Where(a => a.Customer_ID == 7).Select(a => a.Orders); 
0

我们通过使用DataContexts内继承来实现这一点,我们使用EF5, Code-First和MVC4用于前端Web项目。

我们有一个共同的DataContext封装所有常见的表在我们的数据库中使用自己的表+公用表

public partial class Application1Context : CommonDataContext 
{ 
    //Your code 
} 

它们中的每一个

public partial class CommonDataContext : DbContext 
{ 
    //Your code 
} 

和多个专门的数据上下文数据上下文位于同一解决方案内的单独项目中。 希望得到这个帮助。