2011-12-17 20 views
0

Paymentsのコレクションを持つCustomerオブジェクトがあるとします。コレクションに新しいアイテムを追加して保存する

初期化:

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 for Windows Phoneを使用しています。

答えて

3

最初のケースでは、顧客参照をPayment.Customerプロパティに設定しようとしましたか?

など。 customer.Payments.Add(new Payment { Amount = 100, Customer = customer });

私は通常、IDを明示的に設定しませんでしたが、ORMを使用して、エンティティ間の適切な関係を確立します。

関連する問題