因此在生产中我有一个旧的基于Microsoft的OData服务正在使用EF6 DbContext,其中一个*:*
关系被添加到其OnModelCreating(DbModelBuilder模型构建器)方法中:
modelBuilder.Entity<ChipsetComponent>().
HasMany(c => c.Processors).WithMany(p => p.ChipsetComponents).Map(map =>
{
map.ToTable("api_1_0_ProcessorChipsetCompatibility");
map.MapRightKey("ProcessorId");
map.MapLeftKey("ChipsetProductId");
});
那允许(过去时,使用EF 5 + OData 3时,我认为)ChipsetComponents()?$ expand =处理器工作正常。但升级到OData 5.6.4之后,尝试使用$ expand特别打破声明:
"innererror":{
"message":"Object reference not set to an instance of an object.",
"type":"System.NullReferenceException",
"stacktrace":" at System.Data.Services.WebUtil.GetRequestEnumerator(IEnumerable enumerable)\r\n at System.Data.Services.QueryResultInfo.MoveNext()\r\n at System.Data.Services.Serializers.EntitySerializer.WriteNavigationProperties(IExpandedResult expanded, EntityToSerialize entityToSerialize, Boolean resourceInstanceInFeed, IEnumerable`1 projectionNodesForCurrentResourceType) ...
对ChipsetComponents()/处理器进行调用仍然可以在版本更新后正常工作(但当然没有得到ChipsetComponents的数据),并且我已经重新确认了数据的完整性,所以关系不是完全不见了,当前OData与当前DbContext的关系显然是不正确的。
有没有人见过&amp;克服类似的东西?
更新
这实际上影响了我用ICollection属性定义的所有x-to-many关系,如下所示:
public virtual ICollection<Processor> Processors { get; set; }
以前它们没有在类构造函数中初始化,这是Just Fine,因为如果它们没有扩展(填充它们)那么它们也没有被看到。我已经测试了在类构造函数中初始化它们,以防这是一个更改,现在它们扩展为[]而不是在其中包含数据,这不是错误,但仍然完全错误。
看起来$ expand只是无法获取预期的数据,但其他一切都是一样的,并且期望$ expand也能正常工作。
答案 0 :(得分:0)
我似乎需要在此处按照此过程进行操作:http://blogs.msdn.com/b/odatateam/archive/2013/10/02/using-wcf-data-services-5-6-0-with-entity-framework-6.aspx(安装新软件包并将DataService<T>
转换为EntityFrameworkDataService<T>
作为服务的基类。)
&#34;当前&#34;这个包的版本是一个 10个月大的Beta 2 ,这对我对制作的信心有点难,但还没有给我带来功能性的悲伤: https://www.nuget.org/packages/Microsoft.OData.EntityFrameworkProvider/1.0.0-beta2