我正在使用asp.net mvc与durandal& 微风模板。
我有以下类(为清晰起见,删除了一些属性):
public class Rolling
{
[Key]
public int Id { get; set; }
...
public virtual List<Itinerary> Itineraries { get; set; }
}
public class Itinerary
{
[Key]
public int Id { get; set; }
...
public int? VehicleId { get; set; }
public int? TrailerId { get; set; }
...
public virtual Rolling Vehicle { get; set; }
public virtual Rolling Trailer { get; set; }
}
我有以下流畅的API:
modelBuilder.Entity<Rolling>()
.HasMany(c => c.Itineraries)
.WithOptional(c => c.Vehicle)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Rolling>()
.HasMany(c => c.Itineraries)
.WithOptional(c => c.Trailer)
.WillCascadeOnDelete(false);
请注意声明这些流畅API的顺序。
在运行时,我执行一个轻松的查询客户端来获取所有滚动实体:
var query = entityQuery.from('Rollings')
.where(predicates)
.orderBy(orderyByClause)
.expand('Itineraries');
对于每一个,我检查行程集合属性:
rollings()[0].itineraries
我注意到我只检索了Trailer
Itinerary
属性填充的滚动的行程。没有填充Vehicle
Itinerary
属性的滚动。
但是如果我像这样交换流畅的API:
modelBuilder.Entity<Rolling>()
.HasMany(c => c.Itineraries)
.WithOptional(c => c.Trailer)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Rolling>()
.HasMany(c => c.Itineraries)
.WithOptional(c => c.Vehicle)
.WillCascadeOnDelete(false);
然后我注意到我只检索了Vehicle
Itinerary
属性填充的滚动的行程。没有填充Trailer
Itinerary
属性的滚动。
这是正常行为吗?一个错误?
感谢您的调查。
答案 0 :(得分:0)
看起来这是Navigation property no more working after migration of breeze 1.4.2的后续问题。
我能够验证您描述的行为。 我还通过在服务器上运行查询来验证这是EF行为:
var rolling = mgr.Context.Rollings.Include("Itineraries").First();
var itineraries = mgr.Context.Itineraries.Local;
您会注意到,行程只会填充车辆或预告片的行程(取决于流畅的API定义顺序)。
对我来说这看起来像个错误,但是实体框架错误(不是Breeze的错误)。
我认为微软会在这方面有更好的说法,所以在http://social.msdn.microsoft.com/Forums/en-US/7438371d-1072-4a9a-aab8-d12842493066/possible-bug-include-not-working-properly发布了你的问题。