что является предпочтительной практикой при использовании linq2sql (в приложениях asp.net mvc): для создания "singleton" для DataContext
, например:
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
вносит некоторые ограничения в код. поэтому я предпочитаю использовать синглтон. это странная практика?
UPD
объяснение, почему я использую синглтон:
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 также будет потерян), и я бы изменил его на Список. и теперь этот метод будет возвращать «огромный» список, из которого я буду фильтровать данные предыдущей функции.
Надеюсь, я опишу достаточно подробно.