【问题标题】:ADO.NET Entity Framework and WCF ServiceADO.NET 实体框架和 WCF 服务
【发布时间】:2010-08-17 13:49:16
【问题描述】:

我有一个简单的 ADO.NET Entity Framework 4.0 模型 (edmx),它定义了具有外键关系的数据库表。

如何将这些实体发送到 Windows Phone 7 客户端?我创建了一个 WCF 服务(使用 WShttpbinding),方法...

public List<LocationCity> ListCities()
{    
   var dc = ObjectFactory.GetInstance<TestEntities>();
   var locs = dc.LocationCities.Take(10).ToList();
   return locs;
}

我还创建了一个简单的控制台应用程序来使用此服务,但它不起作用...在跟踪中我看到了异常

最多可容纳的物品数 序列化或反序列化 对象图是'65536'

在 System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart

然后我将 MaxItemsInObjectGraph 更改为一个大数字,只是为了看看会发生什么,然后我得到一个堆栈溢出异常。所以在我看来,dataContractSerializer 正在对象图上导航循环属性并进入递归循环。

我只想将 10 个 LocationCity 实体发送到客户端(无论是 Windows Phone 还是控制台)。

我想我可以创建单独的 DataContract POCO 实体,并从上下文中的选择中填充它们……但是,我真的不想无缘无故地复制类。我想我一定是做错了什么。

非常感谢您的帮助!

【问题讨论】:

  • 您看过 WCF RIA 服务吗?
  • 您有没有想过使用数据服务?你有很多业务逻辑吗?或者这只是访问数据库的一种方式?
  • 最终会有很多业务逻辑。我还没有查看 RIA 服务 - 这不是针对 Silverlight 的吗?
  • 你没有启用延迟加载吗?默认情况下它是禁用的,所以你应该知道你是否这样做。
  • 嗯,我以为它默认是禁用的,但是,它不是。这就是原因!谢谢!

标签: c# entity-framework ado.net windows-phone-7 ado.net-entity-data-model


【解决方案1】:

处理循环引用的技巧是使用 [DataContract(IsReference=true)]。 IsReference 属性从 .NET 3.5 SP1 开始可用,因此对您来说应该不是问题。

最好的问候,拉迪斯拉夫

【讨论】:

    【解决方案2】:

    我在实体设计器中将“LazyLoadingEnabled”设置为 true。只需将其设置为 false,一切都很好!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多