2

例如,我有一個與地址有關的聯繫人表。爲了與數據庫進行通信,我使用WCF數據服務。我有一張表格,裏面有聯繫信息和可能的地址列表。現在我創造的「地址插入」,並使用插入聯繫人列表(上下文是這裏的實體數據的上下文):
通過WCF數據服務插入新的父母/子女

context.AddToContact(contact); 
context.SaveChanges(); 

在那之後我可以得到插入contact.ID並將其添加爲一個父ID來在地址列表中的所有地址:

cacheAddressList.ForEach(a => 
         { 
          address.ContactID = contact.ID; 
          context.AddToAddress(address); 
         } 
         ); 
context.SaveChanges(); 

所以我必須做2個插入。
我知道在實體框架中,如果我在它們之間有導航屬性,我可以將子項添加到父項。在我的情況我有導航,但這樣的代碼不工作(接觸處理不當被保存但..):

context.AddToContact(contact); 
cacheAddressList.ForEach(a => 
          { 
           address.Contact = contact; 
          } 
          ); 
context.SaveChanges(); 

是否有可能在插入這裏一個事務中的所有孩子和家長?因爲如果有可能,我沒有創建所有的孩子,列出父插入後添加..

回答

5

下面的代碼示例來做到這一點:

context.AddToContact(contact); 
cacheAddressList.ForEach(a => 
    { 
     address.Contact = contact; 
     context.SetLink(address, "Contact", contact); 
    }); 

context.SaveChanges(SaveChangesOptions.Batch); 

希望這有助於。 謝謝 Pratik

+0

On context.SetLink(address,「Contact」,contact);出現「上下文當前沒有跟蹤實體。」例外。 – 0x49D1

+1

設置了context.AddRelatedObject(contact,「navigation_property_with_address」,address)時工作。 !非常感謝你! – 0x49D1