【发布时间】:2012-09-14 14:06:42
【问题描述】:
我的情况
我有一个包含一些列表的 c# 对象。例如,这些列表之一是标签列表,它是 c#“SystemTag”对象的列表。 我想以最有效的方式实例化这个对象。
在我的数据库结构中,我有以下表格:
- dbObject - 包含有关我的 c# 对象的一些基本信息的表
- dbTags - 所有可用选项卡的列表
- dbTagConnections - 一个包含 2 个字段的列表:TagID 和 ObjectID(以确保一个对象可以有多个标签)
(我还有其他几种类似的数据)
我现在就是这样做的……
- 使用 ID 从数据库中检索我的对象
- 将 DB 对象发送到“对象工厂”模式,然后意识到我们必须获取标签(和其他列表)。然后它使用我们的 C# 对象的 ID 向 DAL 层发送调用
- DAL 层从 DB 中检索数据
- 这些数据被发送到转换为标签的“TagFactory”模式
- 我们回到了对象工厂
这真的很低效,我们对数据库有很多调用。这尤其会带来问题,因为我有 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 ....
但是,这会检索与标记连接一样多的对象 - 所以我不认为连接是实现此目的的好方法。
其他信息...
- 使用 .NET Framework 4.0
- 使用 LINQ to SQL(BLL 和 DAL 层以及 BLL 中的工厂模式从 DAL 对象转换)
...
那么 - 我如何尽可能高效地解决这个问题? :-) 谢谢!
【问题讨论】:
-
我认为您的
WHERE子句包含您要检索的对象的 ID? -
是的,这是真的。但是,我还需要获取我的对象列表 - 在这些情况下当然不是 :-)
-
有很多注意事项。 SO thread 有一些很棒的数据访问讨论。具体来说,如果您正在寻找速度(在您对效率的呼吁中),我会考虑实体框架。以我的经验,如果您有能力提前投入时间来正确连接所有内容,那么 linq to entity 比 linq to sql 快得多。
标签: asp.net sql performance linq-to-sql