假设我有一个基于数据库中Employee
表的自动生成的Employees
类。
现在假设我想将员工数据传递给ShowAges
方法,该方法将打印出姓名&年龄为员工名单。我将通过linq查询检索给定员工集的数据,这将返回一组Employee
个实例。然后,我可以将Employee
个实例传递给ShowAges
方法,该方法可以访问Name
& Age
字段以获取所需的数据。
但是,由于我的Employees
表与我的数据库中的各种其他表有关系,因此我的Employee
类还有Department
字段,Manager
字段等。提供对其他表中相关记录的访问。如果ShowAges
方法要调用任何这些方法,这将导致从数据库中按需提取更多数据。
我想确保ShowAges
方法只使用我已经为它获取的数据,但我真的不想不得不去定义一个复制{的新类的麻烦{1}}类,但方法较少。 (在我的真实场景中,该类必须比这里描述的Employee
类复杂得多;它将有几个“连接”类需要填充,而其他类则不需要填充
有没有办法'关闭'或'断开'Employee
实例,以便尝试访问尚未填充的任何属性或相关对象会引发异常?
如果没有,那么我假设因为这必须是一个共同的要求,可能有一个已经建立的模式来做这种事情?
答案 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类似的问题。它向您展示了几种分离实体的方式。