加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 从数据库加载对象列表以实例化单个对象的有效方法

发布时间:2020-12-16 09:52:09 所属栏目:asp.Net 来源:网络整理
导读:我的情况 我有一个包含一些列表的c#对象.其中一个列表例如是标签列表,它是c#“SystemTag”对象的列表.我想以最有效的方式实例化这个对象. 在我的数据库结构中,我有以下表格: dbObject – 包含有关c#对象的一些基本信息的表 dbTags – 所有可用选项卡的列表
我的情况

我有一个包含一些列表的c#对象.其中一个列表例如是标签列表,它是c#“SystemTag”对象的列表.我想以最有效的方式实例化这个对象.

在我的数据库结构中,我有以下表格:

> dbObject – 包含有关c#对象的一些基本信息的表
> dbTags – 所有可用选项卡的列表
> dbTagConnections – 一个包含2个字段的列表:TagID和ObjectID(以确保对象可以有多个标记)

(我还有其他几种类似的数据)

这就是我现在这样做的方式……

>使用ID从数据库中检索我的对象
>将DB对象发送到“对象工厂”模式,然后实现我们必须获取标签(和其他列表).然后它使用我们的C#对象的ID向DAL层发送调用
> DAL层从数据库中检索数据
>这些数据被发送到“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对象转换)

那么 – 如何尽可能高效地解决这个问题呢? :-) 谢谢!

解决方法

乍一看,我不认为你当前的工作方式是“效率低下”(提供的信息).我会替换代码:

SELECT * FROM dbObject p
LEFT JOIN dbTagConnection c on p.Id=  c.PointId
LEFT JOIN dbTags t on c.TagId = t.dbTagId
WHERE ...

通过两次调用DALs方法,首先检索对象主数据(1),然后再检索一个标记相关的数据(2),以便工厂可以填充对象的标签列表:

(1)

SELECT * FROM dbObject WHERE Id=@objectId

(2)

SELECT t.* FROM dbTags t
INNER JOIN dbTag Connection c ON c.TagId = t.dbTagId
INNER JOIN dbObject p ON p.Id = c.PointId
WHERE p.Id=@objectId

如果您有许多对象并且数据量只是少数(意味着您不会管理大量数据),那么我会寻找基于ORM的解决方案作为实体框架.

我(仍)觉得在DAO中编写SQL查询以控制所有发送到数据库服务器的查询都很舒服,但最后是因为在我们的情况下需要.我没有看到任何不方便查询数据库以恢复,首先,对象数据(SELECT * FROM dbObject WHERE ID = @ myId)并填充对象实例,然后再次查询数据库以恢复所有卫星数据您可能需要(在您的情况下为标签).

您可以更加简洁地了解您的方案,以便我们为您的特定方案提供有价值的建议.希望这对你有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读