我可以在“断开连接”模式下使用自动生成的Linq-to-SQL实体类吗?

时间:2010-03-15 09:55:15

标签: visual-studio visual-studio-2008 linq linq-to-sql

假设我有一个基于数据库中Employee表的自动生成的Employees类。

现在假设我想将员工数据传递给ShowAges方法,该方法将打印出姓名&年龄为员工名单。我将通过linq查询检索给定员工集的数据,这将返回一组Employee个实例。然后,我可以将Employee个实例传递给ShowAges方法,该方法可以访问Name& Age字段以获取所需的数据。

但是,由于我的Employees表与我的数据库中的各种其他表有关系,因此我的Employee类还有Department字段,Manager字段等。提供对其他表中相关记录的访问。如果ShowAges方法要调用任何这些方法,这将导致从数据库中按需提取更多数据。

我想确保ShowAges方法只使用我已经为它获取的数据,但我真的不想不得不去定义一个复制{的新类的麻烦{1}}类,但方法较少。 (在我的真实场景中,该类必须比这里描述的Employee类复杂得多;它将有几个“连接”类需要填充,而其他类则不需要填充

有没有办法'关闭'或'断开'Employee实例,以便尝试访问尚未填充的任何属性或相关对象会引发异常?

如果没有,那么我假设因为这必须是一个共同的要求,可能有一个已经建立的模式来做这种事情?

2 个答案:

答案 0 :(得分:2)

可能不是您正在寻找的答案,但如何将您的查询结果投射到更轻量级的POCO中,例如:

var employeePOCOs = from e in l2sEmployees
select new EmployeePOCO
{
Id = e.Id,
Name = e.FirstName + " " + e.LastName
};

其中EmployeePOCO是预定义的类

那会有帮助吗?我通过AJAX调用返回实体框架对象时使用了这个,其中输出转到JSON,它似乎可以解决问题。

答案 1 :(得分:1)

执行此操作的一种方法是将实体与其数据库上下文“分离”。看看an answer I gave类似的问题。它向您展示了几种分离实体的方式。