2008-12-22 52 views
2

我在使用DLINQ時遇到了一個有趣的問題。當我實例化一個實體時,在DataContext上調用.SubmitChanges()會在數據庫中插入一個新行 - 不需要調用.Insert [All] OnSubmit(...)。DLINQ-插入的實體沒有.InsertOnSubmit(...)?

//Code sample: 
Data.NetServices _netServices = new Data.NetServices(_connString); 

Data.ProductOption[] test = new Data.ProductOption[] 
{ 
     new Data.ProductOption 
     { 
      Name="TEST1", 
      //Notice the assignment here 
      ProductOptionCategory=_netServices.ProductOptionCategory.First(poc => poc.Name == "laminate") 
     } 
}; 

    _netServices.SubmitChanges(); 

運行上面的代碼將在數據庫中插入一個新行。在編寫應用程序來解析XML文件並填充一些表格時,我注意到了這種效果。我注意到當我只有大約50個左右的時候,有1000多個插入 - 然後我終於隔離了這種行爲。

我如何可以防止隱堅持這些對象呢?

感謝, - 查爾斯

+0

更改以下行 ProductOptionCategory = _netServices.ProductOptionCategory.First(POC => poc.Name == 「層壓板」) 到 ProductOptionCategoryID = _netServices.ProductOptionCategory.First(POC => poc.Name ==「層壓板「)。ID 似乎可以解決這個問題。有誰知道任何其他方式? – Charles 2008-12-22 22:19:40

回答

2

具有兩岸關係的思考。當設置了關係的一側的另一側需要被更新,從而在上述的情況下,以及設置ProductOptionCategory它被有效地添加新對象到在層疊體ProductOptionCategory側的ProductOptions關係。

的解決辦法是,你已經發現並設置底層外鍵代替的LINQ to SQL以通常的方式不會跟蹤的對象,並要求隱含指示應該堅持的對象。

當然性能最好的解決辦法是從你不想加入,從來沒有在第一時間創建實例的對象源數據來確定。

+0

謝謝!對不起,沒有回覆這麼久。 -Cheers – Charles 2009-03-31 22:11:51