У нас есть 3 таблицы в нашей базе данных, каждая из которых имеет сущность в нашем edmx.Чтобы проиллюстрировать мою проблему, представьте 3 таблицы:
Table: Make
Fields:
makeID
make
Table: Model
FIelds:
modelID
makeID foreign key
model
Table: Car
carID
modelID foreign key
car
Наша сущность Марка, Модель и Автомобиль имеет все свойства навигации в модели сущности.Ленивая загрузка отключена.Мы хотим иметь возможность выводить все автомобили Jeep Grand Cherokees для вывода на нашу страницу.
Сейчас у нас есть что-то подобное в одной из наших функций (C # 4.0)
IEnumerable<Make> makeList = (((ObjectSet<Lot>)_modelRepository.GetQuery())
.Include(mk => mk.Models.Where(md => md.model == "Grand Cherokee"))
.Where(mk => mk.make == "Jeep").ToList());
_makeRepository.GetQuery()
возвращает IQueryable
... мы реализуем шаблон хранилища
Этот запрос должен работать нормально (не проверял его, создан для этого примера), но как мы можем .Include
таблица машинытак что наша функция возвращает объекты Make таким образом, чтобы заполнить модель и заполнить автомобили (проблема с получением автомобилей, потому что у них нет свойства прямой навигации для создания)
Мы используем объекты POCO.
Цель состоит в том, чтобы иметь 1 функцию, возвращающую сущность Make, чтобы иметь возможность сделать это:
foreach(Make myMake in makeList)
{
Response.Write(myMake.make);
foreach(Model myModel in myMake.Models)
{
Response.Write(myModel.model);
foreach(Car mycar in myModel.Cars)
{
Response.Write(mycar.car);
}
}
}
Нечто подобное кажется невозможным, но это то, для чего мы собираемся:
IEnumerable<Make> makeList = (((ObjectSet<Lot>)_modelRepository.GetQuery())
.Include(mk => mk.Models.Where(md => md.model == "Grand Cherokee"))
.Include(c => mk.Models.Cars)
.Where(mk => mk.make == "Jeep").ToList());
Я также пытался создать новый объект в моем edmx, который содержит всю эту информацию, чтобы я мог просто запросить этот один объект, но у меня продолжают появляться ошибки, сообщающие, что ключи должны быть сопоставлены ... Яидентифицируйте их на вкладке Mapping (Visual Studio 2010) ... поэтому я снова пытаюсь заставить запрос работать.