在使用 LINQ to SQL(在 ASP.NET MVC 应用程序中)时,最好的做法是创建 DataContext 的“单例”,如下所示:
我有这个方法。由于它返回IQueryable - 我可以继续组合查询而不执行它,因此仅返回惰性结果。
如果我使用
partial class db
{
static db _db = new db(global::data.Properties.Settings.Default.nanocrmConnectionString, new AttributeMappingSource());
public static db GetInstance()
{
return _db;
}
}
或者在using
中需要时检索新实例:
using (db _db = new db())
{
...
}
using
的使用会对代码产生一些限制,因此我更喜欢使用单例模式。这种做法是否奇怪?
更新:
我使用单例模式的原因解释如下:
public class UserGroupRepository
{
public static IQueryable<Group> RolesFor(string username)
{
User user = UserRepository.WithUsername(username);
return from g in db.GetInstance().Groups
join ug in db.GetInstance().UsersGroups on g.Id equals ug.GroupId
where ug.UserId == user.Id
select g;
}
}
我有这个方法。由于它返回IQueryable - 我可以继续组合查询而不执行它,因此仅返回惰性结果。
如果我使用
using
重写相同的代码 - 我将无法返回IQueryable(因为数据库将被释放并且IQueryable也将丢失),我会将其更改为List。现在,此方法将返回“庞大”的List,我将在先前的函数中过滤数据。希望我已经描述得足够详细了。
using
也有优雅的解决方案;-) - zerkms