2011-02-17 151 views
5

我有一個實體框架4.0,帶有poco對象。 edmx模型文件是從數據庫中生成的。保存與兩個實體之間的關係N-N關聯

這DataContext的是通過WCF服務訪問,它只是意味着我得到了一些對象,我需要將它們附加到當前的DataContext(或與鍵對應關係重新加載)。

一切似乎都做工精細,除了一種情況:

我有兩條表之間的關係NN,所以我的關聯表,不超過兩個表的ID其他任何領域: Database model

LINQ將其轉換爲以下模式,這似乎是正確的。 LINQ Data model

當我檢索數據時,沒有問題,我自己插入到Right_group中的數據正確轉換爲「我的權限/組中的新對象」。

但是,如果我嘗試修改的東西和保存,這是行不通的

public void SaveRights(Group group, List<Rights> rights){ 
    //here, group and rights are objects attached to the database 
    group.Rights.Clear(); 
    group.Rights.AddRange(rights); 
    _dataContext.SaveChanges(); 
} 

所以我的問題是:如何保存這兩個對象的「關係」? 謝謝!

+1

**不起作用**不是意外行爲的最佳描述。那麼如果執行SaveChanges會發生什麼?通過附加到數據庫,你的意思是你已經將它們加載到_dataContext的同一個實例上? – 2011-02-17 08:34:14

+0

對不起,SaveChanges()完成時,數據不會保存在數據庫中。我的意思是,當我發送對象到WCF端時,我分離了我的datacontext的對象,並且它們不再被跟蹤。所以當我再次進入我的服務器時,我需要附加這些屬性並應用更改 – J4N 2011-02-19 07:31:54

回答

7

如果你想避免加載從數據庫中的對象首先你可以做這樣的(代碼從我aplications的一個考慮,所以你必須適應它):

public void AddAndRemovePersons(int id, int[] toAdd, int[] toDelete) 
    { 
     var mailList = new MailList { ID = id, ContactInformations = new List<ContactInformation>() };   
     this.db.MailLists.Attach(mailList); 

     foreach (var item in toAdd) 
     { 
      var ci = new ContactInformation { ID = item }; 
      this.db.ContactInformations.Attach(ci); 
      this.db.ObjectStateManager.ChangeRelationshipState(mailList, ci, ml => ml.ContactInformations, System.Data.EntityState.Added); 
     } 

     foreach (var item in toDelete) 
     { 

      var ci = new ContactInformation { ID = item }; 
      this.db.ContactInformations.Attach(ci); 
      this.db.ObjectStateManager.ChangeRelationshipState(mailList, ci, ml => ml.ContactInformations, System.Data.EntityState.Deleted); 
     } 
    } 

我發現刪除關係和創建它一樣困難,所以我將代碼留在那裏。這個解決方案的一件事是,在這個函數運行之前,maillist和聯繫人都存在。我附加他們讓國家經理跟蹤他們。

如果您要增加您也想救你將使用新對象的

this.db.MailLists.AddObject(you new item here)

我希望幫助!

0

只是一個想法......如何的關鍵是建立在Right_Group表?如果您同時使用IDRightIDGroup作爲主鍵 - 可能會出現此問題。一個suggetion是添加新的列(ID)插入Right_Group表,並且具有該ID作爲主鍵。然後分別在其他列上使用外鍵(IDRightIDGroup)。

相關問題