我正在使用带有 durandal 和微风模板的 asp.net mvc。
我有以下类(为清楚起见删除了一些属性):
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');
对于每一个,我检查了 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
这是正常行为吗?一个错误?
感谢调查。