Cla*_*Boy 5 .net linq asp.net linq-to-sql
我刚刚用ASP.Net调查了Linq.它确实很整洁.我只是想知道 - 所有课程如何填充?我的意思是在ASP.Net中,假设您有一个名为Catalog的Linq文件,然后使用For循环遍历Catalogue.Products并打印每个产品名称.如何存储细节?它只是在页面加载时通过Products表并为每一行创建另一个Product类实例,有效地将整个表复制到类Product的数组中吗?
如果是这样,我认为我已经创建了一个非常类似的系统,因为有一个SiteContent模块,其中包含每个Manager类的实例 - 例如,有UserManager,ProductManager,SettingManager等.UserManager包含Users表中每行的User类的实例.它们还包含创建,更新和删除等方法.这些管理器及其"项目"是在每个页面加载时创建的.就我,开发人员而言,这使得在每个页面中访问用户,产品,设置等变得简单易行.我需要创建的任何后续页面,我只需要引用SiteContent.UserManager来访问用户列表,而不是从该页面内执行查询(即此方法将数据访问与页面的工作分开,在与使用后面的代码相同的方式将页面的工作方式与页面的布局方式分开.
然而问题是这种技术似乎相当慢.我的意思是它有效地在每个页面加载时创建一个数据库,从另一个数据库获取数据.我已经采取了一些措施,例如,如果在页面加载时未引用ProductManager,则会阻止创建它.因此,当不需要时,它不会将数据加载到存储中.
我的问题基本上是我的技术是否与Linq完全相同,意思是将表中的数据复制到类的属性中.
提前感谢您对此提出任何建议或解答.
问候,
理查德克拉克
Linq to SQL不维护数据库中所有数据的副本.它接受通过IQueryable接口提供它的表达式,读取表达式树,并使用WHERE其他SQL结构将它们转换为实际的SQL语句.
换句话说,当你写这个:
var product = context.Products.Where(p => p.ID == 50).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
它针对数据库执行此操作:
SELECT ID, Name, Foo, Bar, Baz, Blah, ...
FROM Products
WHERE ProductID = 50
Run Code Online (Sandbox Code Playgroud)
它不只是做一个SELECT * FROM Products,然后从结果中搜索特定的产品.
如果您尝试在每个页面加载时"下载"整个数据库,那么您的应用程序确实会很慢.这绝对不是Linq to SQL,Linq to Entities或任何其他ORM框架所做的.