gpt4 book ai didi

.net - Linq - 它是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 16:49:51 25 4
gpt4 key购买 nike

我一直在用 ASP.Net 研究 Linq。确实非常整洁。我只是想知道-如何填充所有类?我的意思是在 ASP.Net 中,假设您有一个名为 Catalogue 的 Linq 文件,然后您使用 For 循环遍历 Catalogue.Products 并打印每个产品名称。详细信息如何存储?它是否只是在页面加载时遍历 Products 表并为每一行创建另一个 Product 类实例,从而有效地将整个表复制到 Product 类数组中?

如果是这样,我想我已经创建了一个非常像这样的系统,因为有一个带有每个 Manager 类实例的 SiteContent 模块 - 例如有 UserManager、ProductManager、SettingManager 等。 UserManager 为 Users 表中的每一行包含一个 User 类的实例。它们还包含创建、更新和删除等方法。这些经理和他们的“项目”是在每次页面加载时创建的。就我(开发人员)而言,这使得在每个页面中访问用户、产品、设置等变得轻松而轻松。我需要创建的任何后续页面,我只需要引用 SiteContent.UserManager 来访问用户列表,而不是从该页面内执行查询(即,此方法将数据访问与页面的工作分开,在与使用后面的代码相同的方式将页面的工作方式与页面的布局方式分开)。

然而问题是这种技术似乎相当缓慢。我的意思是它在每次页面加载时有效地创建一个数据库,从另一个数据库中获取数据。我已采取措施,例如防止在页面加载时未引用 ProductManager 时创建它。因此,它不会在不需要时将数据加载到存储中。

我的问题基本上是我的技术是否与 Linq 完全相同,即从表中复制数据到类的属性中。

提前感谢您对此的任何建议或答案。

问候,

理查德克拉克

最佳答案

Linq to SQL 不维护数据库中所有数据的副本。它接受您通过 IQueryable 提供的表达式接口(interface),读取表达式树,并使用 WHERE 将它们转换为实际的 SQL 语句和其他 SQL 结构。

换句话说,当你写这个时:

var product = context.Products.Where(p => p.ID == 50).SingleOrDefault();

它对数据库执行此操作:
SELECT ID, Name, Foo, Bar, Baz, Blah, ...
FROM Products
WHERE ProductID = 50

它确实 不是 做一个 SELECT * FROM Products然后从结果中搜索特定产品。

如果您尝试在每次页面加载时“下载”整个数据库,您的应用程序确实会很慢。这绝对不是 Linq to SQL、Linq to Entities 或任何其他 ORM 框架所做的。

关于.net - Linq - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com