2010-06-24 62 views
1

這裏LINQ到SQL問題中插入多個對象是我的對象關聯:是相同

Summary 
-> Job 
    -> Operator 
-> Job 
    -> Operator 

所以,我有一個包含喬布斯的集合,其中有一個操作員對象(時鐘彙總對象#,名稱等)

創建新摘要時,我會檢查並創建存在的新作業並添加所有屬性。然後,在構建的Summary對象上執行一次插入。然後,如果需要,這會插入新的作業和操作員,否則我可能會從數據庫中讀取現有的作業和操作員。

當我具有相同的Operator運行這兩個作業並且運算符不存在於數據庫中時,問題就出現了。 Linq-To-SQL試圖插入同一個對象兩次並失敗,因爲我使用時鐘#作爲主鍵。

我可以爲主鍵創建一個自動編號,但然後我會重複數據,我寧願不這樣做。有沒有人有任何想法來解決這個問題?

謝謝!

+0

新問題...當我在創建摘要的子對象期間嘗試插入操作符時(通過循環),Linq嘗試提交所有更改(包括部分構建的摘要)。有一些未填充的日期字段導致插入操作崩潰。另外,我正在使用StructureMap來緩存數據庫,因此不同的存儲庫應該使用相同的實例。 – Dragn1821 2010-06-24 18:27:49

回答

1

我認爲問題在於如何編寫對象創建。我還沒有看到你的代碼,但我認爲你正在做這樣的事情:

Summary summary = new Summary 
            { 
             Jobs = new List<Job> 
               { 
                new Job 
                 { 
                  Operator = new Operator {Name = "foo"} 
                 }, 
                new Job 
                 { 
                  Operator = new Operator {Name = "foo"} 
                 } 
               } 
            }; 

如果這是你的情況下,嘗試實例化操作「foo」的事前,然後將其分配給兩個作業。

如果您已經完成並仍然出現錯誤,那麼您應該先創建操作員並將其保存到數據庫,然後檢索並將其分配給所需的作業。

+0

是的,它與此類似。唯一的區別是你創建新的操作符的地方,我會首先檢查數據庫,如果存在的話從那裏拉。 我曾考慮過你的解決方案,但我擔心它會花很多時間來重寫我們已經構建的東西。希望能有一個簡單的屬性,我可以打開和Linq會檢查這種事情... – Dragn1821 2010-06-24 12:34:58

+0

當添加新的運算符來查看是否有多個作業時,必須執行檢查... if所以和操作符是一樣的,然後將第二個作業中的操作符對象設置爲第一個作業中的操作符對象的值(而不是爲第二個作業創建一個新的操作符)。 似乎工作。 – Dragn1821 2010-06-30 15:18:41