2011-12-17 2 views
0

Предположим, у нас есть объект Customer с коллекцией Payments.Добавление и сохранение новых предметов в коллекции

Инициализация:

var dataContext = new TestDataContext(); 
dataContext.Customers.InsertOnSubmit(new Customer { Id = 1, Name = "Customer1" }); 
dataContext.SubmitChanges(); 
var customer = dataContext.Customers.Where(c => c.Id == 1).First(); 

Первый случай:

customer.Payments.Add(new Payment { Amount = 100, CustomerId = customer.Id }); 
dataContext.SubmitChanges(); 
var count = dataContext.Payments.Count(); // count == 0 

Второй случай:

dataContext.Payments.InsertOnSubmit(new Payment { Amount = 100, Customer = customer }); 
dataContext.SubmitChanges(); 
var count = dataContext.Payments.Count(); // count == 1 

Третий случай (комбинированный):

customer.Payments.Add(new Payment { Amount = 100, CustomerId = customer.Id }); 
dataContext.Payments.InsertOnSubmit(new Payment { Amount = 100, Customer = customer }); 
dataContext.SubmitChanges(); 
var count = dataContext.Payments.Count(); // count == 2 (!) 

Я предполагаю, что InsertOnSubmit как-то уведомляет объект DataContext об изменениях. Но просто задавался вопросом, почему в первом случае это не указано?

P.S. Я использую SQL CE для Windows Phone.

ответ

3

Вы пытались установить ссылку клиента на Свойство Payment.Customer в первом случае?

E.g. customer.Payments.Add(new Payment { Amount = 100, Customer = customer });

Я обычно не устанавливал идентификаторы явно, но использовал ORM и устанавливал правильные отношения между объектами.

Смежные вопросы