2012-07-24 66 views
0

我有一個簡單的關係:添加新的對象與相關的現有對象插入新行現有對象

我有一個「注」的對象,其中有一個相關的「公司」對象。 當創建一個「註釋」時,您選擇一個現有的「公司」,並輸入其他必要的字段。

我的問題是,每當我保存,它插入一個新的版本的「公司」的對象,我不明白爲什麼。

我已經在這裏接受的答案 Insert new object with existing object中嘗試過所有的選項,但沒有任何效果。

目前,我做了以下內容:

var company = db.Company.FirstOrDefault(i => i.ID == note.Company.ID); 
note.Company = company; 

db.Notes.AddObject(note); 
db.ObjectStateManager.ChangeObjectState(company, EntityState.Unchanged); 
db.ObjectStateManager.ChangeObjectState(note, EntityState.Added); 

db.SaveChanges(); 

但是,它不斷加入新的 「公司」 對象。奇怪的是,它並沒有添加所有字段,只是公司名稱「字段(並創建了一個新的Id)。

回答

0

如果這是現有公司,請設置CompantID字段而不是實體

note.CompanyID = company.ID; 
0

我認爲問題出現在FirstorDefault方法中使用note.Company.Id時,如果您可以發佈entrie方法,我可以進一步提供幫助如果您有companyId作爲參數進入方法,那麼你可以修改上面的代碼如下:

Company company = db.Company.Find(companyId); 
note.Company = company; 
db.SaveChanges(); 

或作爲其他答案建議只設置note.CompanyId

0

問題是你正在創建一個新的實例Note並設置Company屬性,因此我假設EF重新創建公司記錄。如果您試圖將您的Note鏈接到現有的Company對象,則只需在記事上設置公司的外鍵,例如

var company = db.Company.FirstOrDefault(i => i.ID == note.Company.ID);  
note.CompanyID = company.ID; // will link the note to the specified company 
db.Notes.AddObject(note); 
db.SaveChanges(); 

它也沒有讓您使用note.Company.ID拉下來公司感,這個屬性應該是null如果它是一個新的Note

0

這是我該怎麼做,希望它有幫助。

using (DataContext dtx = new DataContext()) { 

      Note note = new Note(); 

      dtx.Notes.Add(note); 

      Company company = dtx.Companies.FirstOrDefault((System.Object obj) => obj.ServerId == 1); 

      note.Server = company; 

      dtx.SaveChanges(); 

     } 
0

感謝您的迴應。

最後我的問題是,首先,當爲頁面創建我的模型時,我實例化了一個初始的新「公司」,所以我將公司設置爲null來創建。

然後,在頁面上,我有Html.TextBoxFor(model => model.Company.CompanyName,....(它是一個自動完成的ajax文本框,當選擇時設置一個隱藏的companyID字段)何時意味着新公司目標是獲取傳遞給控制器​​。

我曾嘗試設置公司ID之前將其設置爲null,但沒有奏效。 然而,除去上述textboxfor位,一切都開始工作!

相關問題