2010-02-14 70 views
4

我正在閱讀Pro Asp.Net MVC,他們正在構建所有的linq2sql實體類,並將它們與linq映射屬性進行映射。然而,我看到的所有其他人(來自谷歌搜索)都在談論linq 2 sql,似乎正在使用視覺設計器來構建他們的所有實體。哪個是構建l2s實體的首選方法,每個實體的優缺點是什麼?使用dbml進行linq2sql查詢有哪些優缺點?

我注意到迄今爲止唯一的區別是,我似乎無法使用可視化設計器進行繼承映射,儘管MSDN說我應該可以這樣做,所以我可能只是在VS 2010的界面中丟失它。但是,我不太確定我應該使用繼承,因爲在技術上可以添加額外的連接時,我不需要子表數據。

作爲一個PS,l2s不會對我的模式做任何修改,我會手動生成模式更改,然後將它們複製到linq2sql中。

感謝,

回答

2

我們一直使用設計師。它確實引入了一個額外的步驟,每次您對模式進行更改時,都需要將該表重新導入到設計器中,但是我認爲,如果繞過設計器,那麼與您需要編寫的代碼量相比,effrot會變得更糟糕。

另請注意,設計師創建部分類,您可以爲包含其他實現細節的部分類創建額外文件。這樣,當表格在設計師身上得到反饋時,它就會給你留下額外的代碼。我們這樣做是爲了向類中添加很多輔助函數,並且提供覆蓋原始整數FK字段的嚴格類型的枚舉屬性。

確實,繼承很難完成,但我認爲如果你需要這種數據層,L2S可能不是最好的解決方案。我更喜歡保持數據層清潔和簡單,只需使用L2S將數據導入和導出,然後在業務層中使用更復雜的邏輯。如果我們確實需要在數據層中做對象繼承等事情,我可能會探索一種更先進和複雜的技術,如EF

1

我們使用L2S建立了我們的整個應用程序框架的後端。我開發了大部分的這一點。我開始使用DBML設計器,但我很快意識到這是一場皇家的痛苦。每個模式更改都需要對設計人員中的表格進行更改。另外,由設計人員創建的實體都被塞進一個類文件中,並且沒有我想要的所有功能,如支持M2M關係等等。所以,沒過多久,我意識到我想要一個更好的方法。

我最終編寫了我自己的代碼生成器,以我想要的方式生成L2S實體,並且它還生成在應用程序層中使用的「輕量級」實體集合。這些沒有任何L2S管道。代碼生成器直接從目標數據庫創建所有這些實體和其他代碼。沒有更多的DBML!

這對我們非常有用,我們的實體正是我們想要的方式,每當我們的數據庫模式發生變化時都會自動生成。

相關問題