我正在使用LINQ来建模我的数据库,但是我正在手工编写它(Steve Sanderson在他的ASP.NET MVC书中推荐这个)。我需要知道的是,在创建EntityRef时会发生什么,以及它是如何引用的。如果我手动创建我的查询(不使用LINQ),但使用LINQ对其进行建模,并且我只返回某些内容的ID,那么在视图中使用EntityRef引用实际的表列,它是否进行连接,或者是重新查询数据库以获取该信息?
要清理,如果我在我的存储库中有这个:
public IEnumerable<MyTable> ListMyTable(int? myColumnVar)
{
string query = "SELECT * FROM MyTable WHERE MyColumn = {0}";
return this.ExecuteQuery<MyTable>(query, myColumnVar);
}
然后在我的控制器中我这样做:
IEnumerable<MyTable> mytables = _contractsControlService.ListMyTable(1);
return View(mytables);
然后在我看来我做了像
这样的事情<%=tbl.Ref.MyColumn %>
我正在引用LINQ模型设置的内容,但实际上并不在表输出中。它是如何获得这些数据的?
为了进一步清理,我们正在使用需要最高速度的系统,因此LINQ-to-SQL对我们来说太慢了,因此我们在存储库中使用直接查询的原因。我不介意使用这个EntityRef业务,只要我知道下面发生了什么。
答案 0 :(得分:2)
您最有可能使用Object Relational设计器为Ref实体创建实体类,并在MyTable和Ref实体之间创建关联。您也可以通过创建适当的实体类并使用属性将类映射到数据库模式来手动执行此操作。您可以在MSDN上的How to: Customize Entity Classes by Using the Code Editor (LINQ to SQL)中阅读详细信息。
在生成的(或手写的)代码中,您会找到一些属性:
[Table(Name="dbo.Ref")]
public partial class Ref : INotifyPropertyChanging, INotifyPropertyChanged
和
public partial class MyTable: INotifyPropertyChanging, INotifyPropertyChanged
{
[Association(Name="Ref_MyTable", Storage="_Ref", ThisKey="RefId",
OtherKey="Id", IsForeignKey=true)]
public Ref Ref
{
get
...
实体类与属性结合使Linq-to-Sql框架能够直接从数据库中检索实体类。
如果要监视Linq-to-Sql生成的SQL,可以分配DataContext.Log
属性:
context.Log = Console.Out;
在您的示例中,从MyTable导航到Ref,可能会沿着这些行生成SQL:
SELECT Id, Field1, Field2, Field3
FROM Ref
WHERE Id = @RefId