Asp.net mvc MVC更多指定的模型也应该由更精确的查询填充?
如果您有一个carDetail页面具有20个左右属性(和几个表联接)的汽车模型,那么您的LINQ到SQL查询将非常大 如果您有一个carListing页面,该页面使用了5个以下的属性(全部来自1个表),那么您将使用CarSummary模型。是否应使用与汽车模型相同的查询填充汽车摘要模型 或者应该使用更精确的单独LINQ到SQL查询Asp.net mvc MVC更多指定的模型也应该由更精确的查询填充?,asp.net-mvc,performance,linq-to-sql,Asp.net Mvc,Performance,Linq To Sql,如果您有一个carDetail页面具有20个左右属性(和几个表联接)的汽车模型,那么您的LINQ到SQL查询将非常大 如果您有一个carListing页面,该页面使用了5个以下的属性(全部来自1个表),那么您将使用CarSummary模型。是否应使用与汽车模型相同的查询填充汽车摘要模型 或者应该使用更精确的单独LINQ到SQL查询 我只是在考虑性能,但LINQ使用延迟加载,所以我想知道这是否是一个问题。我认为在您的情况下,延迟加载不会带来太多好处,因为您将使用每个表中的1个属性,所以迟早要呈现页
我只是在考虑性能,但LINQ使用延迟加载,所以我想知道这是否是一个问题。我认为在您的情况下,延迟加载不会带来太多好处,因为您将使用每个表中的1个属性,所以迟早要呈现页面,您必须执行所有连接。在我看来,您可以使用相同的查询并将汽车模型转换为汽车摘要模型。如果性能实际上是一个问题或当前的一个问题,您应该执行单独的投影linq查询,以便sql查询仅选择填充视图模型所需的5个字段,而不是返回所有20个字段。创建视图模型以表示所需的不同投影,然后使用如下选择投影
from c in Cars
select new CarSummary
{
Registration = c.Registration,
...
}
这将创建一个只选择所需属性的查询
如果关系在数据上下文关系图(dbml)中表示,则它们将被解析
也可以将对象嵌套在投影内
select new CarSummary
{
...
Owner = new OwnerSummary
{
OwnerName = c.Owner.FirstName,
OwnerAge = c.Owner.Age
}
...
}
如果您在许多地方使用相同的投影,那么写一个如下的方法会很有帮助,这样投影就发生在一个地方
public IQueryable<CarSummary> CreateCarSummary(IQueryable<Car> cars)
{
return from c in cars
select new CarSummary
{
...
}
}
公共IQueryable CreateCarSummary(IQueryable汽车)
{
从c乘汽车返回
选择新的CarSummary
{
...
}
}
在需要时,可以这样使用
public IQueryable<CarSummary> GetNewCars()
{
var cars = from c in Cars
select c;
return CreateCarSummary(cars);
}
public IQueryable GetNewCars()
{
var cars=来自cars中的c
选择c;
退货汇总表(cars);
}
public IQueryable<CarSummary> GetNewCars()
{
var cars = from c in Cars
select c;
return CreateCarSummary(cars);
}