Jestem całkowitym nowicjuszem w Entity Framework i ASP.Net MVC, uczyłem się głównie z samouczków, bez głębokiego zrozumienia któregokolwiek z nich. (Posiadam doświadczenie w .Net 2.0, ADO.Net i WebForms)Entity Framework - Jak powinienem instancji mój obiekt "Entities"
Moje obecne wątpliwości wynikają ze sposobu, w jaki umieszczam obiekty moich obiektów.
zasadzie robię to w moich kontrolerami:
public class PostsController : Controller {
private NorthWindEntities db = new NorthWindEntities();
public ActionResult Index() {
// Use the db object here, never explicitly Close/Dispose it
}
}
robię to w ten sposób, bo okazało się, że w pewnym blogu MSDN, który wydawał wystarczająco miarodajne mi się, że zakłada się, że był to właściwy sposób .
Jednak czuję się nieswojo w tej kwestii. Mimo że oszczędza mi dużo kodu, jestem przyzwyczajony do robienia:
using (NorthWindEntities db = new NorthWindEntities() {
}
W każdej metody, która potrzebuje połączenia, a jeśli ta metoda nazywa innym, że będzie to potrzebne, to będzie przechodzić jako db parametr do nich. W ten sposób zrobiłem wszystko z obiektami połączeniowymi, zanim istniało Linq-SQL.
Inną rzeczą, która mnie niepokoi, jest to, że narzędzie NorthWindEntities implementuje IDisposable, co zgodnie z konwencją oznacza, że powinienem nazywać to metodą Dispose(), a ja nie.
Co o tym sądzisz?
Czy poprawnie jest wstawiać obiekt Obiekty, tak jak ja? Czy powinien dbać o swoje połączenia, otwierając i zamykając je dla każdego zapytania?
A może powinienem być disposing to jawnie z using() klauzula?
Dzięki!
OK, to ma sens. Teraz pytanie brzmi ... Czy robię coś niepoprawnie? Czy naprawdę muszę pozbyć się obiektu Obiekty? Co się stanie, jeśli nie? Czy będę "przeciekać" połączenia z serwerem SQL? –
ObjectContext.Dispose nie robi wiele (patrz Reflektor). Ale rozsądnie jest założyć, że to się może zmienić, a ty * możesz * pozbyć się go. –