我发现自己为每个查询都写了这一行:
using ( MyDataModel thisDataContext = new MyDataModel() )
{
linq query
}
有没有更好的方法来声明数据上下文?
感谢。
答案 0 :(得分: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();
}
}
然后创建满足您需求的方法 e.g:
public class YourEntityDataService:BaseDataService
{
public YourEntityDataService(string connection):base(connection)
{
}
public YourEntity GetYourEntity()
{
//LINQ CODE
}
public void SaveYourEntity (YourEntity entityToSave)
{
//LINQ CODE
}
}
答案 1 :(得分:0)
我们实际上将我们的数据上下文对象作为Thread Static对象放在当前线程上。这样做会消除我们必须将上下文对象传递给需要它的每个方法。
我们有一个n层架构,当我们从客户端调用我们的中间层时,我们只是新建一个上下文对象并将其放在线程上。然后,任何需要进行数据库调用的方法都会将上下文对象从线程中拉出来。因此,我们的中间层代码中很少有地方可以实际创建上下文对象。事实上,如果我没记错的话,只有一个地方。
即使使用这种方法,我们的上下文对象也不会存在很长时间(这是一件好事)。