2011-01-21 55 views
2

我发现自己写这条线的每个查询:LINQ数据上下文抽象

using (MyDataModel thisDataContext = new MyDataModel()) 
{ 
    linq query 
} 

是否有更好的方法来声明一个数据上下文?

谢谢。

回答

1

你可以创建一个DataService类,代表您的DataContext
例如为:

public class BaseDataService:IDisposable 
    { 
     protected MyDataModel thisDataContext = null; 
     public BaseDataService(string connection) 
     { 
      this.thisDataContext = new MyDataModel (connection); 
     } 


     public void Dispose() 
     { 
      this.thisDataContext.Connection.Close(); 
      this.thisDataContext.Dispose(); 
     } 


    } 

然后创建一个满足你的需要方法 例如: -

public class YourEntityDataService:BaseDataService 
    { 

     public YourEntityDataService(string connection):base(connection) 
     { 

     } 

     public YourEntity GetYourEntity() 
     { 
//LINQ CODE 
     } 

     public void SaveYourEntity (YourEntity entityToSave) 
     { 
//LINQ CODE 
     } 
} 
0

我们实际上把我们的数据上下文对象放在当前线程上作为线程静态对象。这样做会消除我们必须将上下文对象传递给每个需要它的方法。

我们有一个n层架构,当我们的中间层从客户端调用时,我们只需创建一个上下文对象并将其放到线程中。然后,任何需要进行数据库调用的方法都只是将线程上下文对象拉出。所以,在我们的中间层代码中,我们实际上正在创建一个上下文对象的地方非常少。事实上,只有一个地方,如果我记得正确的话。

即使使用这种方法,我们的上下文对象也不会活得那么久(这是件好事)。