2011-10-30 58 views
1

我有一個包含在保持日曆數據庫,這些日曆在使用FK每個表幾個表散開......複製實體但使用新密鑰的最佳方式是什麼?

一切正常,但現在我希望能夠說

創建基於日曆ID的所有它的功能,新的日曆:62

我嘗試的一種方式,但它的可怕,女巫會通過我的所有庫Update區和火每個ONDE,將在每個表中創建新內容...

有更快的解決方案嗎?

的方式,我們可以簡單地說

db.Entity<Calendar>(CalendarId).CloneAsNew(); 

,所以我將結束:面前只有一個日曆

[Table Calendars] 
calendar_id Name Url 
62    Cal_A url_A 
74    Cal_A url_A 

[Table CalendarContents] 
content_id calendar_id type img_background img_top 
14   62   1  bkg.png   top.png 
26   74   1  bkg.png   top.png 

,作爲

[Table Calendars] 
calendar_id Name Url 
14    Cal_A url_A 

[Table CalendarContents] 
content_id calendar_id type img_background img_top 
14   62   1  bkg.png   top.png 

PS如果分離並重新重視它像

context.Detach(entity); 
entityCollection.Add(entity); 

我們失去所有引用: -/

回答

0

EF不提供克隆實體圖的任何方法。在這個時候你必須通用的解決方案:

  • 創建存儲過程來克隆你的日曆,將其映射爲函數導入並將其用於克隆和檢索新日曆的Id。一旦你有一個Id執行新的查詢來加載新日曆的整個實體圖。
  • 獲取整個舊日曆的實體圖並創建深層克隆(您必須將實體圖序列化到流並反序列化爲新的實體圖)。將新實體圖添加到上下文並保存更改。它應該將所有實體插入到新圖中。
0

試試這個:(含EF 4.1)

檢索要與NoTracking擴展複製日曆方法在查詢上。 然後將Id更改爲0並執行:

Context.Entry(calendar).State = EntityState.Added;

Context.SaveChanges();

+0

我使用'.edmx'文件(實體對象)而不是'.tt'文件(DbContext) – balexandre

+0

您也可以將DbContext與edmx文件一起使用。有了這個,你可以嘗試這個解決方案。 – marianosz

相關問題