2012-06-15 53 views
0

我是實體框架的新手。實體框架中的部分保存4.1

我有一組靜態數據,其中包括以下內容:

模板,其中有許多人使用列

我想創造出具有現有模板的引用的新UserReport許多關係以及與所述相同模板相關聯的列的子集。

我希望保存UserReport記錄和一系列將UserReport鏈接到現有列的UserReportColumns映射表中的記錄。

我的代碼如下:

ReportTemplate template = staticData.ReportTemplates.First(); 
UserReport newReport = new UserReport() 
{ 
    .... 
    Columns = FilterColumns(template.Columns) 
    .... 
} 
    .... 
    context.UserReports.Attach(userReport); 
    context.UserReports.AddObject(userReport); 
    context.SaveChanges(); 

這試圖重新創建數據庫對象層次的一切。

我怎樣才能得到它,以便它只保存UserReport和UserReport_Column鏈接?

回答

1

您正在從不同的DbContext實例(或某個緩存的數據源)檢索template。因此,context假定模板和列是新對象。

要解決此問題,您必須將現有對象附加到上下文以避免EF將它們添加到數據庫。

foreach(var column in newReport.Columns) 
    { 
     context,Column.Attach(column); 
    } 

    context.UserReports.Attach(template); 
    context.UserReports.AddObject(userReport); 
    context.SaveChanges(); 
+0

啊太棒了 - 作品一種享受。 – BonyT