Код, подобный этому, будет очень проблематичным.
В первом примере вы тесно связываете экземпляр DbContext с сущностью.Вызов tblUser.list () вернет список пользовательских сущностей, но теперь они будут выходить за рамки DbContext.(Из-за закрытия блока using()
) Это означает, что любые ленивые вызовы загрузки для извлечения связанных сущностей завершатся неудачно, и вы не сможете сохранить какие-либо изменения в сущностях, пока они не будут повторно присоединены к другому DbContext.Это становится очень грязным, очень быстрым.
Во втором примере вы расширяете DbContext, что означает, что каждая «сущность» эффективно определяет область применения DbContext для заполнения своих экземпляров.Вы не можете просто «статически» обернуть метод, потому что он не будет иметь видимости для нестатических DbSets, унаследованных от DbContext.
Это было бы ужасно с точки зрения производительности, и с точки зрения кода выглядело быпросто странно:
Т.е.
using (var user = new tbluser)
{
var users = user.list(); // not static.
// .. Do stuff..
}
Сделать статичным было бы проблематично, потому что DbContext должен был бы быть статически ограничен внутри tbluser
public class tbluser
{
private static MyContext _context = new MyContext();
// ...
public static List<tbluser> list()
{
return _context.tblusers.ToList();
}
}
И это можетпо-прежнему возникают проблемы, такие как расположение статического экземпляра до того, как он будет удаленно функционировать, но я, конечно, не могу рекомендовать такой подход.
Вместо этого используйте DbContext, как предполагалось.Посмотрите на контейнеры IoC, такие как Unity или Autofac, чтобы управлять областью жизни для DbContext и внедрить экземпляр как зависимость в классы, которые в этом нуждаются, или как минимум обернуть его в блок using() {}
и обработать его как хранилище с егоDbSets.
Существует множество примеров эффективного использования DbContext, использования шаблонов Repositories и Unit of Work с внедрением зависимостей.Освойте их, прежде чем пытаться раскрутить что-то уникальное.Будущие разработчики, просматривающие ваш код, будут вам благодарны.:)