【发布时间】:2014-04-24 16:35:50
【问题描述】:
在 ASP.NET Web API 服务模型中,由 ADO.NET 实体框架数据模型数据库优先方法生成的实体类组成。
当模型在服务响应中返回给客户端时,外键表中的数据也会被返回。例如:Customer 表包含 Contact 表作为外键表。
生成POCO(实体)的实体框架如下。
public partial class Customer
{
public int Id {get;set;}
public FirstName {get;set}
public LastName {get;set;}
//Foreign key table
public virtual Contact Contact {get;set;}
}
服务模型是:
public class Customer
{
public Customer customer {get;set;}
}
从 API 控制器创建模型类的实例,从数据库中检索数据并返回给客户端。
问题是“当客户表中的所有记录或单个记录返回给客户端时,它也会返回外键(引用)表中的数据。 假设 Contact 表中有大约 100 个联系人,当 Web 服务客户端请求一个资源时,返回的数据也包括 Customer 表中的所有数据。
感谢您解决此问题。
问候
【问题讨论】:
-
不应该,因为
virtual关键字意味着这些相关记录将被延迟加载。您是否使用Include()赢得您的查询? -
如何确认相关数据返回?您是否使用分析器来查看生成的 SQL 查询?还是您只是检查实体上的集合?如果是后者,那么您可能是延迟加载,这会给人一种数据存在的错误印象,而实际上,它是按需查询。
-
@ChrisHardie 它们在尝试序列化时会被延迟加载,因为它被标记为
virtual。Include()用于热切加载。
标签: asp.net web-services entity-framework