Связанная с linqToSql таблица не задерживает загрузку должным образом. Вообще не заселен - PullRequest
0 голосов
/ 13 марта 2009

У меня есть пара таблиц со структурой отношений, аналогичной стандартным таблицам Order, OrderLine.
При создании контекста данных он дает классу Order свойство OrderLines, которое должно быть заполнено объектами OrderLine для этого конкретного объекта Order.
Конечно, по умолчанию это задержит загрузку материала в свойстве OrderLine, но это должно быть довольно прозрачно, верно?

Хорошо, вот моя проблема: я получаю пустой список, когда я иду MyOrder.OrderLines, но когда я иду myDataContext.OrderLines.Where(line => line.OrderId == 1), я получаю правильный список.

public void B()
{
  var dbContext = new Adis.CA.Repository.Database.CaDataContext(
    "<connectionString>");
  dbContext.Connection.Open();
  dbContext.Transaction = dbContext.Connection.BeginTransaction();
  try
  {
    //!!!Edit: Imortant to note that the order with orderID=1 already exists 
    //!!!in the database

    //just add some new order lines to make sure there are some
    var NewOrderLines = new List<OrderLines>()
    {
      new OrderLine() { OrderID=1, LineID=300 },
      new OrderLine() { OrderID=1, LineID=301 },
      new OrderLine() { OrderID=1, LineID=302 },
      new OrderLine() { OrderID=1, LineID=303 }
    };

    dbContext.OrderLines.InsertAllOnSubmit(NewOrderLines);
    dbContext.SubmitChanges();

    //this will give me the 4 rows I just inserted
    var orderLinesDirect = dbContext.OrderLines
          .Where(orderLine => orderLine.OrderID == 1);

    var order = dbContext.Orders.Where(order => order.OrderID == 1);
    //this will be an empty list
    var orderLinesThroughOrder = order.OrderLines;
  }
  catch (System.Data.SqlClient.SqlException e)
  {
    dbContext.Transaction.Rollback();
    throw;
  }
  finally
  {
    dbContext.Transaction.Rollback();
    dbContext.Dispose();
    dbContext = null;
  }
}

Итак, насколько я вижу, я не делаю ничего особенно странного, но я думаю, что orderLinesDirect и orderLinesThroughOrder дадут мне один и тот же набор результатов.
Может кто-нибудь сказать мне, почему это не так?

1 Ответ

1 голос
/ 13 марта 2009

Вы просто добавляете OrderLines; не какие-либо фактические заказы. Так что Where в dbContext.Orders возвращает пустой список.

Как вы все еще можете найти свойство OrderLines на заказ, я не понимаю, так что, возможно, я здесь лгу

[Изменить] Не могли бы вы обновить пример, чтобы показать фактические типы, особенно переменную порядка? Imo, это должно быть IQueryable<Order>, но странно, что вы можете .OrderLines в это. Попробуйте добавить First() или FirstOrDefault() после Where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...