Это должно быть довольно просто.Задача кэширования LINQ to SQL
У меня есть LINQ к SQL (C# 3.5/SQL Server) работает хорошо, с простым соотношением в месте между двумя таблицами Конференции и ConferenceAttendees.
Я уже создал и совершил конференцию, затем добавить 3 ConferenceAttendees используя следующий код (повторяется 3 раза):
прекрасно работает, и я вижу 3 новых посетителей появляются в базы данных.
UPDATE: Затем, используя совершенно новый DataContext, я стараюсь следующим:
string Names = String.Empty;
Conference RequestedConference = db.Conferences.FirstOrDefault(x => x.ConferenceId == ConferenceID);
foreach (ConferenceAttendee Attendee in RequestedConference.ConferenceAttendees)
Names += Attendee.Name + ", ";
Но он не имеет какое-либо связанное с Attendees присоединенного к нему! (Они определенно существуют в базе данных и были совершены). Но RequestedConference.ConferenceAttendees всегда имеет счетчик 0 поэтому цикл никогда не вошел ..
foreach (ConferenceAttendee Attendee in this.ConferenceAttendees)
{ Names += Attendee.Name; }
Я делаю это внутри частичного класса конференции, с помощью метода я сделал под названием PrintAllAttendeeNames().
Что я делаю неправильно и почему этот свежий datacontext не видит эти связанные объекты через LINQ, когда они уже зарегистрированы в базе данных?
(Примечание: Я уже пытался дозвониться
db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
без толку ..)
Большое спасибо
Исповедь UPDATE
Я абсолютный дебил. У меня была установка dataContext как статическая. Обычно я этого не делаю, поэтому у меня обычно нет проблем с ленивой загрузкой.
Я это:
public static MyDataContext db = new MyDataContext(ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString);
Конечно, изменить его на это решить проблему !!!
public MyDataContext db = new MyDataContext(ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString);
Спасибо за первый вопрос, о котором я должен знать, и я буду делать с этого момента. У меня все еще есть проблемы. Да, ленивая загрузка обычно отлично подходит для меня. Это должно быть что-то очень простое! См. Выше: я обновил, чтобы объяснить код, который я использую для загрузки на конференции, и повторить его через Участников. Но граф всегда 0! – Aaron
Я идиот. Я объявил dataContext статичным !!! GRRR !!! Большое спасибо за вашу помощь и жаль тратить ваше время. 1 балл. – Aaron
Вообще говоря, DataContext НИКОГДА не должен держаться дольше, чем время, необходимое для выполнения какой-либо работы. DataContext является единицей рабочего класса, поэтому сделать его полем или свойством класса является плохая идея. Создавайте как можно раньше, распоряжайтесь как можно раньше и создавайте новый экземпляр каждый раз, когда выполняете работу в блоке. – jrista