2009-08-29 74 views
0

在GetData3()方法中创建另一个数据上下文会导致问题吗?我可以在Linq TO Sql中使用嵌套的DataContexts吗?

public void SetoFDataMethods() 
    { 
    using (DataContext DC= new DataContext()) 
    { 

     var d1=DC.GetData1(); 
     var d2=DC.GetData2(); 
     var d3=DC.GetData3(); 

     display(d3); 

    } 
    } 


    public result GetData3() 
    { 
     If (conditionA) 
     { 
       using (DataContext newContext=new DataContext()) 
       { 
        var result= newContext.GetData4(); 
        return result; 
       } 
     }   
    } 

回答

3

不,我认为这不一定会造成问题,但可能会造成混淆。每个上下文都是独立的,除非您明确地编码,否则不会共享事务。我使用多个数据上下文,一个用于审计,另一个用于实际数据,但它们是单独的,甚至不映射相同的表格。

我的建议是将数据上下文向上推到一个级别 - 从方法到类 - 所有类中的方法都可以共享相同的数据上下文。我没有这样做的原因是我明确想要分开事务,以便通过审计实用程序记录失败和成功。在我共享相同数据上下文的地方,我确实在实例级而不是方法级使用它。

推动上下文的一个好处是,如果需要进行单元测试,则可以轻松注入模拟上下文。在你的方法中创建一个数据上下文会使单元测试变得困难,因为你没有一种简单的方法将它与实际的数据库隔离。我发布了一个blog entry模拟/伪造LINQ数据上下文使用包装一会儿回来,这可能会有所帮助,如果你沿着这条路走下去。

1

请注意,从一个上下文中检索到的对象与该上下文绑定,除非您做了相反的显式魔术。就目前而言,试图从一个上下文中删除一个对象,将会抛出一个异常。

1

我建议您发送DataContext作为参数并使用相同的DataContext。

1

默认情况下不容易。您必须分离绑定到上下文的实体才能在另一个数据上下文中使用它们。一个简单的解决方案就是创建一个工作单元模式。

相关问题