Napisałem własną niestandardową warstwę danych, aby utrwalić się w określonym pliku i wyodrębniłem ją za pomocą niestandardowego wzorca DataContext.Deklaracja zwrotu plonów wewnątrz bloku using() {} Usuwa przed wykonaniem
Wszystko opiera się na strukturze .NET 2.0 (dane ograniczenia dla serwera docelowego), więc nawet jeśli niektóre z nich mogą wyglądać jak LINQ-SQL, to nie! Właśnie zaimplementowałem podobny wzorzec danych.
Zobacz przykład poniżej, na przykład sytuacji, której nie mogę jeszcze wyjaśnić.
Aby uzyskać wszystkie instancje Animal - mogę to zrobić i działa metodę drobnych
public static IEnumerable<Animal> GetAllAnimals() {
AnimalDataContext dataContext = new AnimalDataContext();
return dataContext.GetAllAnimals();
}
A realizacja GetAllAnimals() w AnimalDataContext() poniżej
public IEnumerable<Animal> GetAllAnimals() {
foreach (var animalName in AnimalXmlReader.GetNames())
{
yield return GetAnimal(animalName);
}
}
AnimalDataContext () implementuje IDisposable, ponieważ mam tam XmlTextReader i chcę się upewnić, że zostanie szybko oczyszczony.
Teraz gdybym owinąć pierwszego połączenia wewnątrz użyciu instrukcji jak tak
public static IEnumerable<Animal> GetAllAnimals() {
using(AnimalDataContext dataContext = new AnimalDataContext()) {
return dataContext.GetAllAnimals();
}
}
i umieścić punkt przerwania na pierwszej linii AnimalDataContext.GetAllAnimals() metody i inny punkt przerwania w pierwszym linia w metodzie AnimalDataContext.Dispose() i wykonać ...
metoda Dispose() jest wywoływana PIERWSZA tak że AnimalXmlReader.GetNames() daje „nie odwołanie do obiektu ustawione na wystąpienie obiektu” wyjątek, ponieważ ma AnimalXmlReader został ustawiony na null w Dispose() ???
Jakieś pomysły? Mam przeczucie, że jego powrót związany wydajność nie pozwala się nazywać wewnątrz bloku try-catch, który korzystając skutecznie reprezentuje, gdy skompilowany ...
Jest to w zasadzie jeden z problemów, z jaką się spotkałem, a także, patrz na moje pytanie tutaj: http://stackoverflow.com/questions/1524367 –