我有一個包含一些列出了C#對象。其中一個列表是例如一列標籤,它是c#「SystemTag」對象的列表。 我想以最有效的方式實例化這個對象。
在我的數據庫結構,我有以下表格:
- DBOBJECT - 其中包含有關我的C#對象的一些基本信息
- dbTags表 - 所有可用的選項卡的列表
- dbTagConnections - 一個列表有2個字段:TagID和ObjectID(以確保一個對象可以有幾個標籤)
(我有幾個其他類似的類型數據)
這是我現在該怎麼辦呢?
- 使用ID
- 發送DB對象的「對象工廠」模式,檢索從DB我的對象,然後意識到我們必須得到標籤(和其他列表)。然後使用我們的C#對象的ID
- 的DAL層檢索來自DB
- 這些數據發送到轉換成的標籤的「TagFactory」模式的數據發送調用DAL層
- 我們回到對象工廠
這真的是效率低下,我們對數據庫有很多調用。這尤其給出了問題,因爲我有4種以上的列表。
我試過了什麼?
我不是在SQL確實不錯,但我已經試過以下查詢:
SELECT * FROM dbObject p
LEFT JOIN dbTagConnection c on p.Id= c.PointId
LEFT JOIN dbTags t on c.TagId = t.dbTagId
WHERE ....
然而,因爲有tagconnections這個retreives儘可能多的對象 - 所以我不認爲加入作爲好辦法做到這一點。
其他信息...
- 使用.NET Framework 4.0
- 使用LINQ to SQL(BLL和DAL層在BLL工廠模式從DAL對象轉換)
...
那麼 - 我該如何解決這個儘可能高效? :-) 謝謝!
我認爲你的'WHERE'子句有你想要檢索的對象的id? –
是的,這是事實。但是,我還需要獲取我的對象列表 - 在這些情況下當然不是:-) –
有很多考慮因素。在[SO線程]中有一些很好的數據訪問討論(http://stackoverflow.com/questions/2698151/entity-framework-vs-linq-to-sql-vs-ado-net-with-stored-procedures) 。 具體來說,如果你正在尋找速度(在你的要求效率),我會考慮實體框架。根據我的經驗,如果你能負擔得起的時間來適當地連接一切,LINQ到實體比LINQ到SQL要快得多。 – samuelesque