2008-10-08 46 views
7

我一直在使用這個漂亮的LINQ to SQL工具來訪問asp.net項目中的數據訪問層。我一直對基礎表進行更改,以便數據類識別我必須刪除的更改並讀取已更改的表。是否有一些重新生成數據層的捷徑?Linq to SQL Class Regeneration

回答

5

我遇到了這個問題,並且使用sqlmetal絕對是一個很好的解決方法。一種方法是創建一個執行你的sqlmetal命令的批處理文件,這種方式你可以隨時運行批處理,只要你需要更新你的Linq到SQL類,但更簡單的解決方案是使用Visual Studio的Tools-> External Tools函數在Visual Studio中創建一個與您的參數一起運行sqlmetal的命令。這很好,你甚至可以將創建的命令放到工具欄上進行單擊重建。

+0

如何保持我的懶加載屬性?我的意思是,當我使用sqlmetal重新生成模型時,我失去了我設置爲延遲加載的FK屬性。有沒有辦法讓他們?謝謝! – emzero 2010-03-30 20:35:29

3

您可以使用sqlmetal,這是linq to sql類的命令行類生成器。

1

對於SQLMetal沒有完全切斷它的情況/模型,例如由於數據庫和模型中的命名約定不同,或者您的L2S模型中有一些其他自定義,我有一個用於Visual Studio的插件,它添加了將L2S設計器與底層數據庫[模式]同步的命令。 (加上其他L2S和EF相關的功能捆綁)

你可以閱讀更多關於它,下載它,並從http://www.huagati.com/dbmltools/

1

LINQ到SQL版本1獲得30天試用許可證不支持檢測數據庫架構變化。修改生成的類的唯一方法是使用設計器或SQLMetal重新生成它們。

請記住,SQLMetal和設計者之間沒有太多差異,設計者對SQLMetal來說是一個更漂亮的UI,並且隱藏了許多命令行開關。

我使用設計器,因爲我懶得不斷地加載命令提示符。

此外,請確保您不要將任何自己的代碼寫入生成的類中,否則您將在重新生成時丟失它。所有生成的類都是部分這意味着您可以輕鬆地將您自己的擴展程序添加到單獨的文件中。

0

在過去的工作中,我們創建了一個包裝類到sqlmetal生成的DataContext。然後,我們創建了一個精簡的數據層,使DataContext和sqlmetal生成的所有類保持私有。

如果軟件中的任何操作都需要來自數據庫的信息,他們必須通過這個包裝層來獲取它。換句話說,沒有任何LINQ to SQL可以出現在這個數據層之外。

這樣,每當我們必須通過sqlmetal重新生成類時,只有部分數據層可能會中斷。在整個邏輯或應用程序域中更容易修復所有數據訪問代碼所在的一層,而不是將LINQ to SQL更改爲SQL。