流畅的API - 集合导航

时间:2013-09-19 15:52:24

标签: entity-framework breeze

我正在使用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属性的滚动。

这是正常行为吗?一个错误?

感谢您的调查。

1 个答案:

答案 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发布了你的问题。