Asp.net mvc LINQ建模通过EntityRef自动检索数据
我使用LINQ来建模我的数据库,但我是手工编写的(Steve Sanderson在他的ASP.NET MVC书中推荐了这一点)。我需要知道的是创建EntityRef时发生了什么,以及它是如何被引用的。如果我手动创建查询(不使用LINQ),但使用LINQ对其进行建模,并且只返回某个对象的ID,然后在视图中使用EntityRef引用实际的表列,那么它是执行联接还是重新查询数据库以获取该信息 要解决问题,如果我的存储库中有以下内容:Asp.net mvc LINQ建模通过EntityRef自动检索数据,asp.net-mvc,linq,Asp.net Mvc,Linq,我使用LINQ来建模我的数据库,但我是手工编写的(Steve Sanderson在他的ASP.NET MVC书中推荐了这一点)。我需要知道的是创建EntityRef时发生了什么,以及它是如何被引用的。如果我手动创建查询(不使用LINQ),但使用LINQ对其进行建模,并且只返回某个对象的ID,然后在视图中使用EntityRef引用实际的表列,那么它是执行联接还是重新查询数据库以获取该信息 要解决问题,如果我的存储库中有以下内容: public IEnumerable<MyTable>
public IEnumerable<MyTable> ListMyTable(int? myColumnVar)
{
string query = "SELECT * FROM MyTable WHERE MyColumn = {0}";
return this.ExecuteQuery<MyTable>(query, myColumnVar);
}
public IEnumerable ListMyTable(int?myColumnVar)
{
string query=“从MyTable中选择*,其中MyColumn={0}”;
返回this.ExecuteQuery(查询,myColumnVar);
}
然后在我的控制器中执行以下操作:
IEnumerable<MyTable> mytables = _contractsControlService.ListMyTable(1);
return View(mytables);
IEnumerable mytables=\u contractsControlService.ListMyTable(1);
返回视图(mytables);
在我看来,我做的事情
<%=tbl.Ref.MyColumn %>
我引用的是LINQ模型设置的内容,但实际上不在表输出中。它是如何获得这些数据的
为了进一步澄清问题,我们使用的系统需要极高的速度,因此LINQ到SQL对我们来说太慢了,因此我们在存储库中使用直接查询。如果我知道下面发生了什么,我就不介意使用EntityRef业务。您很可能使用对象关系设计器为Ref实体创建了一个实体类以及MyTable和Ref实体之间的关联。您还可以通过创建适当的实体类并使用属性将这些类映射到数据库模式来手动执行此操作。您可以在MSDN上阅读详细信息 在生成的(或手写的)代码中,您会发现一些属性:
[Table(Name="dbo.Ref")]
public partial class Ref : INotifyPropertyChanging, INotifyPropertyChanged
及
实体类与属性相结合,使Linq to Sql框架能够直接从数据库检索实体类
如果要监视由Linq生成的SQL to SQL,可以分配DataContext.Log
属性:
context.Log = Console.Out;
在您的示例中,从MyTable导航到Ref,可能会生成以下几行SQL:
SELECT Id, Field1, Field2, Field3
FROM Ref
WHERE Id = @RefId
我忘了说我是手工写模型的。我不能依赖自动生成的代码。因此,通过我的模型引用另一个字段会创建一个新的SQL查询并对SQL server执行它?@Kezzer:是的,基于您用来描述对象关系映射的属性。使用DataContext.Log属性查看所使用的SQL。好吧,这就是我需要知道的所有内容。真的,我没有意识到你可以通过这种方式找到答案。干杯
SELECT Id, Field1, Field2, Field3
FROM Ref
WHERE Id = @RefId