在ASP.NET Web API中,服务模型由实体类组成,这些类是由ADO.NET实体框架数据模型数据库第一种方法生成的。
在Service响应中将Model返回给客户端时,也会返回来自Foreign键表的数据。例如: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控制器创建模型类的实例,从数据库中检索数据并将其返回给客户端。
问题是"当Customer表中的所有记录或单个记录返回给客户端时,它也从外键(引用)表返回数据。 假设Contact表中有大约100个联系人,当从Web服务客户端请求一个资源时,返回的数据也包括来自Customer表的所有数据。
帮助感谢您解决此问题。
此致
答案 0 :(得分:2)
为ObjectContext设置“LazyloadingEnabled”属性为False已解决此问题。
context.Configuration.LazyLoadingEnabled = false;
http://msdn.microsoft.com/en-us/library/vstudio/dd456846(v=vs.100).aspx的更多内容 http://msdn.microsoft.com/en-ie/data/jj574232.aspx
答案 1 :(得分:0)
我的猜测是,当WebAPI序列化Customer对象时,Contacts集合被延迟加载然后被序列化。一个选项是在返回客户之前手动分离客户。
context.Detach(customer);
请参阅:
http://msdn.microsoft.com/en-us/library/vstudio/system.data.objects.objectcontext.detach(v=vs.100).aspx http://msdn.microsoft.com/en-us/library/vstudio/bb738697(v=vs.100).aspx
Eidt:
考虑使用数据传输对象(DTO)。这将允许您控制要传输的序列化内容。我喜欢使用AutoMapper(可通过NuGet获取)将数据从我的EF模型复制到DTO。