У меня есть класс Linq to SQL.
В моей базе данных есть отношения один ко многим.
В конструкторе правильно отображаются отношения, и в конструкторе создается свойство EntitySet<>
.
Когда я запускаю код, EntitySet<>
не заполняется никакими данными, даже если есть связанные записи, они не заполняются в EntitySet<>
Мне не хватает какого-то свойства или параметра? Должен ли я сам написать запрос? Я чувствую, что упускаю что-то очевидное.
Вот код конструктора:
[Association(Name = "Bar_Foo", Storage = "_Foo", ThisKey = "ID", OtherKey = "BarID")]
[DataMember(Order = 15, EmitDefaultValue = false)]
public EntitySet<Foo> Foos
{
get
{
if ((this.serializing && (this._Foo.HasLoadedOrAssignedValues == false)))
{
return null;
}
return this._Foo;
}
set
{
this._Foo.Assign(value);
}
}
Это код, в котором я пытаюсь получить доступ к EntitySet <>:
partial void OnCreated()
{
foreach (Foo foo in Foos)
{
foo.DoSomething();
}
}
Подробнее о моей ситуации:
Итак, сверху у меня есть класс Bar с коллекцией Foo. То, что я пытаюсь сделать, это передать Bar в пользовательский интерфейс через службу WCF. Вот мой основной сервисный звонок:
public class TheService : ITheService
{
public List<Bar> GetBars()
{
try
{
using (var db = new BarDataContext())
{
List<Bar> Bars = new List<Bar>();
Bars = (from B in db.Bars
select B).ToList();
return Bars;
}
}
catch (Exception ex)
{
throw new FaultException(ex.Message + " Something in GetBars() Stack Trace: " + ex.StackTrace);
}
}
}
В настоящее время, когда служба возвращает Бары, Foos внутри каждого Бара равна нулю.
Если я создаю свойство в Bar, которое смотрит на Foos, я получаю исключение нулевой ссылки.
Я пытаюсь выполнить запрос в методе OnCreated для заполнения Foos, идентификатор текущего бара равен 0.
Обновлен запрос, который все еще не работает:
using (var ctx = new BarDataContext())
{
List<Bar> Bars= new List<Bar>();
Bars= (from B in ctx.Bars
select B).ToList();
foreach (Bar bar in Bars)
{
bar.Foos= (from B in ctx.Bars
where B.ID == bar.ID
select B.Foos).SingleOrDefault();
}
return Bars;
}
Этот код генерирует исключение нулевой ссылки, когда я пытаюсь запросить Foos из Bar.
EDIT:
Приведенный выше код волшебным образом перестал генерировать нулевые ссылочные исключения, не знаю почему. Мне интересно, что вам даже не нужно устанавливать bar.Foos в приведенном выше запросе, вы можете поместить запрос Foos в переменную, которая никогда не используется, и она заполнит свойство Bar.Foos только потому, что вы посмотрели на Foos. Напоминает мне о коте Шредингера.