2011-07-13 41 views
3

我爲我的mvc 3項目使用了linq到sql。有幾種方法可以生成域模態類文件。如何爲LINQ to SQL生成類?

  1. sqlmetal
  2. 對象關係設計
  3. 手代碼

我總是用手代碼的模型類文件。因爲由sqlmetal或設計器生成的文件是混亂的。你怎麼看?最好的辦法是做什麼。

編輯:

我使用MVC 3,不2.也許我錯了,但是這是我的驗證。無論如何,我最終會寫出所有這些類文件,那麼使用工具生成它們有什麼意義?

public class User 
{ 
    [Required] 
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
} 
+0

使用工具(L2S,T4,無論)的要點是,無論何時您手動編寫代碼,您都容易犯錯。此外,它可以讓您免於佈線所帶來的煩瑣麻煩。我有T4模板可以生成你正在描述的* EXACT *結構,但我永遠不必考慮它 - 只要對象模型發生變化就重新生成。這讓我專注於實際的應用程序邏輯。 – GalacticCowboy

+0

我還會補充一點,重複自己(違反DRY原則)最多隻會浪費時間,並且最糟糕的是容易出錯。作爲一個例子,你只需要指定一次字符串的長度。如果你在你的桌子上,再一次在你的桌子上做,你會加倍努力,並有可能失去同步的風險。避免這種做法是做代碼生成的一大優勢,無論你如何做或使用哪種數據訪問技術。實體框架實際上通過提供來自VS的T4模板來包含這一點。如果它支持跨數據庫查詢和更好的查詢日誌記錄,那麼我們可能會切換。 – mattmc3

回答

4

我們有數百個跨多個數據庫(一臺服務器)表。我們進行表格第一次開發,將表格拖放到不同的DBML設計器文件中,每個文件夾代表每個項目中不同的名稱空間。設計器文件被標記爲不編譯,我們使用定製的T4模板,通過讀取項目中的任何DBML文件來生成我們的代碼。這使我們可以完全控制生成的代碼,所以我們可以執行諸如實現接口(IAuditable是我們擁有CreatedBy,CreatedDate,ModifiedBy,ModifiedDate的一個示例)。我們也可以將System.ComponentModel.DataAnnotations放在我們的Linqed對象上,而不需要使用Buddy Classes。我們有第二個T4模板負責從數據庫中刷新DBML,所以我們可以確保表中有3部分前綴(db.schema.tbl),所以我們不必刪除並重新添加到設計師。 XML只是在讀取數據庫模式和更新DBML的基礎上進行更改。我們還爲每個POCO生成一個存儲庫/管理器對象,這些對象有幾個常見的查詢操作,如GetByID(),還處理提交和審計日誌。這些管理者可以擴展所有需要針對每個表編寫的自定義查詢,並且他們擁有DataContext。這種設計有時被稱爲「媽媽,我可以嗎?」方法,那裏的對象Linqed必須要求其經理爲它做所有事情。

我發現這是做L2S的用途很廣,光滑的方式,並且它是由我們的後端的開發變得輕而易舉,使我們可以把我們的重點放在了用戶體驗。唯一的缺點是,如果我們在名稱空間中進行關聯,則必須自己手動將這些關聯添加到部分類中,否則您必須將該外部表添加到另一個DBML才能繪製關聯。這實際上並不是一件壞事,因爲我們真正想到了我們的命名空間的特殊性並減少了額外的命名空間。以這種方式使用T4是開發DRY的好方法(不要重複自己)。表格定義是唯一需要改變結構的地方,它全部傳播。驗證集中在一個地方,即POCO。查詢在一個地方,經理。如果你想做類似的事情,here's a good place to start

+0

我正在使用MVC 3.我仍然需要編寫每個類進行驗證。那麼使用這些工具生成它們有什麼意義。 public class User { [必需的] public string Password {get;組; } [必需,比較(「密碼」)] public string ComparePassword {get;組; } } – qinking126

+0

我們也使用MVC 3。我們生成的生成類仍然是像MS一樣的Linq-to-SQL partials,只是有一些增強。例如,如果數據庫表的列不允許NULL,那麼會爲您添加[必需]屬性以及字符串長度等。 – mattmc3

+0

另外,還有一個驗證方法,可爲您爲業務實現的每個類提供邏輯驗證。因此,您編寫的唯一代碼就是您實際需要編寫的代碼 - 查詢和業務驗證。剩下的時間我們可以集中在我們需要的地方 - 關於用戶體驗。 – mattmc3

0

即使設計器生成的類很雜亂,對你有什麼影響?

有,我敢說,完全沒有必要開過設計文件之一。

如果您需要延長任何模型中定義的實體,它們都是局部類,因此你可以創建自己的局部類同名並實現你的東西......

當我做使用L2S,我只是使用設計師。

相關問題