我刚刚开始使用Linq to SQL和Windsor Castle IoC容器来创建一个新的Web应用程序,虽然在初步测试中似乎工作正常,但我确实可以对它进行健全性检查。
当我尝试在应用程序的不同部分使用Linq将对象从数据库中拉出来然后在数据库中更新它们时,我遇到了问题。由于它们来自不同的数据上下文,我无法保存更改。
所以我在整个应用程序中使用了一个datacontext - 希望基于每个Web请求。 - 这是解决问题的合理方法吗?
看起来像这样:
public class DataContextAccessor : IDataContextAccessor
{
private readonly DataContext dataContext;
public DataContextAccessor(string connString)
{
dataContext = new DataContext(connString);
}
public DataContext DataContext { get { return dataContext; } }
}
我使用Castle来解释这个:
<component id="DataContextAccessor" service="DomainModel.Repositories.IDataContextAccessor, DomainModel"
type="DomainModel.Repositories.DataContextAccessor, DomainModel" lifestyle="PerWebRequest">
</component>
然后每当我想要进入一个类的数据库时,我只是在构造函数中声明IDataContext datacontext
。
答案 0 :(得分:1)
我可以看到你将遇到的问题是你的接口IDataContextAccessor是否公开了DataContext属性:
public interface IDataContextAccessor{
DataContext DataContext{get;}
}
这个问题在于你实际上已经将你的接口与linq创建的DataContext紧密耦合,这意味着模拟和单元测试几乎是不可能的。