Я пишу службу wcf, используя linq to sql datacontext для выполнения операций с базой данных.
Имея записи о клиентах и заказах, один метод должен возвращать конкретного клиента по идентификатору, например:
public customer Customer_Get_By_Session_Id(string session_id) {
//check valid session_id
//...
//if session_id exists, get customer info
var saved_customer = (from p in db.customers
where p.session_id == session_id
select p).FirstOrDefault();
return saved_customer;
}
Однако при вызове из моего метода тестирования он возвращает только одного клиента без каких-либо заказов.
[TestMethod]
public void CustomerGetByid()
{
dataclassesDataContext db = new dataclassesDataContext();
var mycust = db.partner_svc_customers.FirstOrDefault();
var saved_customer = svc_wcf.Customer_Get_By_Session_Id(mycust.session_id);
//fails! saved_customer.orders.Count() == 0
Assert.IsTrue(saved_customer.orders.Count() == 1);
}
Я могу обойти эту проблему, изменив мой метод так, чтобы вручную добавлять заказы другому клиенту return_customer и возвращать этот объект.
public customer Customer_Get_By_Session_Id(string session_id) {
//check valid session_id
//...
//if session_id exists, get customer info
var saved_customer = (from p in db.customers
where p.session_id == session_id
select p).FirstOrDefault();
var orders = saved_customer.orders.ToList();
customer return_customer = new customer();
return_customer = saved_customer;
foreach (order my_order in orders)
{
returned_customer.orders.Add(my_order);
}
return returned_customer;
}
Теперь тест завершается без ошибки.
Мой вопрос: почему? Чего здесь не хватает? Разве объект клиента не должен быть отправлен со всеми заказами без изменений, как я и ожидал?
Спасибо за вашу помощь!