C# Linq到Sql数据库调用

C# Linq到Sql数据库调用,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我找不到答案。我相信答案很简单,我不认为我在寻找正确的东西 我有一个.dbml文件,其中有两个表:Employees和Departments。两者之间有关系,员工有部门ID 无论如何,我在我的代码中这样做: Employee emp = Employee.Get(123); string fname = emp.FirstName; string lname = emp.LastName; string deptName = emp.Department.Name; string deptCo

我找不到答案。我相信答案很简单,我不认为我在寻找正确的东西

我有一个.dbml文件,其中有两个表:Employees和Departments。两者之间有关系,员工有部门ID

无论如何,我在我的代码中这样做:

Employee emp = Employee.Get(123);

string fname = emp.FirstName;
string lname = emp.LastName;
string deptName = emp.Department.Name;
string deptCode = emp.Department.Code;

我想知道的是,每次我打电话给
emp.Department
,是不是在打数据库电话?还是在我创建Employee对象时加载了所有信息?

当您第一次访问emp.Department.Name时,它访问了数据库

当你在下一个语句中说
emp.Department.code
时,它不会再进行另一次旅行,它应该已经在内存中获得了
Department
对象

这更详细地解释了这一点

你可能想看看


当您第一次访问
emp.Department.Name
时,它访问了数据库

当你在下一个语句中说
emp.Department.code
时,它不会再进行另一次旅行,它应该已经在内存中获得了
Department
对象

这更详细地解释了这一点

你可能想看看


查询只执行一次以检索数据。之后,它会在内存中的上下文中进行跟踪


您可以使用SQL Profiler对此进行验证。

查询只执行一次以检索数据。之后,它会在内存中的上下文中进行跟踪


您可以使用SQL Profiler来验证这一点。

当我说
emp.Department.code
时,它是否制作了另一个版本?@Steven-我修改了我的答案以回答您的评论,并提供了更多详细信息。希望这有帮助。@Steven:不!一旦L2S加载了依赖实体-它已加载并准备好使用;无需再次返回数据库-L2s不会这样做。当您第一次访问依赖实体的任何属性时,它将加载该实体一次—一旦完成—它就完成了。当我说
emp.Department.code
时,它是否又加载了一个依赖实体?@Steven—我已修改了我的答案以回答您的评论,并提供了更多详细信息。希望这有帮助。@Steven:不!一旦L2S加载了依赖实体-它已加载并准备好使用;无需再次返回数据库-L2s不会这样做。当您第一次访问依赖实体的任何属性时,它将加载依赖实体一次—一旦完成—它就完成了。鉴于您向我们展示的内容,我们无法知道。请显示Employee.Get和Empoyee.Department的代码——然后我们可以告诉.imho,您应该/可以自己测试的东西。有多种方法可以验证这一点:1-使用LinqPad,2-在SQL server上放置跟踪,3-在获取后,在fname=emp…之前中断,然后更改数据库中的值或禁用网络连接,4-在“FirstName”上使用VS的“转到定义”功能再挖一点,看看它是否调用过DB。考虑到你给我们展示的东西,没有办法知道。请显示Employee.Get和Empoyee.Department的代码——然后我们可以告诉.imho,您应该/可以自己测试的东西。有多种方法可以验证这一点:1-使用LinqPad,2-在SQL server上放置跟踪,3-在获取后,在fname=emp之前中断…,然后更改数据库中的值或禁用网络连接,4-在“FirstName”上使用VS的“go to definition”功能,并仔细查看它是否调用过数据库。