2

我在這裏遇到了一些難題,我希望你們中的一些人能夠幫助填充空白。ASP.NET MVC(MVC2)在使用Linq到SQL和存儲庫層插入/更新數據時的最佳實踐

我目前面臨的情況是關於我的「用戶」表和我的「OpenID」表。我的應用程序允許用戶擁有多個OpenID,因此我將它們保存在一個單獨的表格中。

用戶
ID
用戶名

的OpenID
ID
用戶ID
Claimedidentifier

我有一個CRUD儲存庫中的每個表,並且我還有一個與Repository連接的服務(每個回購服務一個服務)。

我的問題是關於插入新用戶(因爲更新將遵循相同的主體)。這是我腦海中的選擇。

  1. 有UserService添加一個新用戶,獲取用戶的ID,然後使用用戶名
  2. 有UserService發送新用戶與ClaimedIdentifier到UserRepository沿插入一個新的OpenID,並有庫插入用戶和OpenID(這不太適合CRUD方法)
  3. 創建User表和OpenID表的視圖,創建UsersOpenIDRepository和UsersOpenIDService,然後插入到View中。

超出我能想到的任何其他想法或建議將不勝感激。

請注意,我不使用NHibernate,因此我可以建模我的域名,但我認爲合適。我在這個項目上堅持Linq to SQL,

回答

0

根據我的經驗,Linq2SQL並不適合CRUD方法。讓它合適意味着跳過太多的籃球來真正值得。你所描述的問題甚至不僅僅是一個 - 更新實體時會變得更糟。

因此,我在當前項目中選擇瞭解決方案2(在usersrepostory中插入兩個實體)。

我也放棄了存儲庫的更新方法。不確定我的儲存庫是否有一個SubmitChanges方法,必須在加載的實體上執行所有更新後調用。在同一個Web請求中創建的所有存儲庫都共享同一個DataContext,因此,我稱之爲Submitchanges的存儲庫並不重要。這不是CRUD,但它更適合執行數據庫更新的LINQ2SQL方式。

如果您確實想要純粹的CRUD,您可能想要查看帶有POCO實體生成模板的EF。

+0

因此,在這種插入方式下兩次命中數據庫並非世界末日?我很擔心有太多的數據庫命中。此外,我並沒有完全賣給EF,NHibernate或者其他類似的東西......這只是一條學習曲線。 – 2010-06-23 22:10:19

+0

它當然不是世界末日。如果我沒有弄錯,Linq2SQL將這種插入翻譯成兩個插入,並且一個選擇從數據庫中獲取ID。關於EF:我也沒有賣。花費1周評估EF之後。 Linq2SQL非常容易使用。如果只是它不是一個垂死的技術。 – 2010-06-24 10:23:29