Entity Framework 4 - объединение представления SQL с репозиторием IQueryable <T> - PullRequest
0 голосов
/ 07 января 2011

Если у меня есть следующее IQueryable<T> Репозиторий:

public class OrderRepository : GenericRepository<Order>, IOrderRepository
{
   public IQueryable<Order> Find()
   {
       return Context.CurrentEntitySet;
   }
}

И я использую это, чтобы получить конкретный заказ:

var order = orderRepository.Find().SingleOrDefault(x => x.OrderId == 1);

Все хорошо.

Теперь у меня есть представление SQL Server 2008 с именем OrderDetailsView , которое я добавил в мой EDMX. В нем есть поле с именем OrderId , к которому я хочу присоединиться. Это 1-1 между Order и OrderDetailsView .

Я хочу вернуть определенный ордер и соответствующую запись OrderDetailsView.

Я не уверен, что правильный подход здесь.

  • Могу ли я иметь навигационное свойство для сущности View в моем Order? Я могу добавить ассоциацию - но дизайнер жалуется на то, что она не отображается - я предполагаю, что для этого требуется FK, но, очевидно, у View не может быть FK.

  • Нужно ли делать явное соединение? Если это так, это означает, что они являются независимыми объектами без какой-либо связи, поэтому мне потребуется другой репозиторий - и мне понадобятся два вызова базы данных, поскольку вы не можете выполнить JOIN через два репозитория.

В идеале я бы хотел сделать это:

return ctx.Orders.Include("OrderDetailsView").SingleOrDefault();

Но, как уже упоминалось, я не знаю, возможно ли добавить навигационное свойство, которое указывает на представление.

Есть идеи?

1 Ответ

0 голосов
/ 07 января 2011

Понятно - мне нужно было добавить Ссылочное ограничение (так как нет FK):

alt text

Теперь я могу загрузить вид как любой другой навигационный файл.

Ну, это было проще, чем я думал! :)

...