【问题标题】:Can I use the auto-generated Linq-to-SQL entity classes in 'disconnected' mode?我可以在“断开连接”模式下使用自动生成的 Linq-to-SQL 实体类吗?
【发布时间】:2010-03-15 09:55:14
【问题描述】:

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

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

但是,因为我的Employees 表与我的数据库中的各种其他表有关系,所以我的Employee 类也有一个Department 字段、一个Manager 字段等,可以访问这些表中的相关记录其他表。如果 ShowAges 方法调用这些方法中的任何一个,这将导致从数据库中按需获取更多数据。

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

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

如果不是,那么我假设既然这必须是一个常见的要求,那么可能有一个已经建立的模式来做这种事情?

【问题讨论】:

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


    【解决方案1】:

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

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

    EmployeePOCO 是一个预定义的类

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • @Randy:这个答案似乎是关于处理更新和同步。我没有做任何更新,所以我更关心防止读取尚未填充的成员...?
      • @Gary - 从数据上下文中分离实体将阻止读取尚未填充的成员。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多