Entity framework Fluent API-集合导航

Entity framework Fluent API-集合导航,entity-framework,breeze,Entity Framework,Breeze,我正在使用asp.net mvc和durandal&breeze模板 我有以下类(为了清晰起见删除了一些属性): 对于每一个,我都会检查“行程”集合属性: rollings()[0].itineraries 我注意到,我只检索了行程的拖车属性已填充的滚动行程。没有填写行程的车辆属性的滚动 但是如果我像这样交换fluent API: modelBuilder.Entity<Rolling>() .HasMany(c =>

我正在使用asp.net mvc和durandal&breeze模板

我有以下类(为了清晰起见删除了一些属性):

对于每一个,我都会检查“行程”集合属性:

rollings()[0].itineraries
我注意到,我只检索了
行程
拖车
属性已填充的滚动行程。没有填写
行程
车辆
属性的滚动

但是如果我像这样交换fluent 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);
modelBuilder.Entity()
.HasMany(c=>c.行程)
.带可选(c=>c.拖车)
.WillCascadeOnDelete(假);
modelBuilder.Entity()
.HasMany(c=>c.行程)
.带选装件(c=>c.车辆)
.WillCascadeOnDelete(假);
然后我注意到,我只检索了
行程
车辆
属性已填充的滚动行程。没有填写
行程
拖车
属性的滚动

这是正常的行为吗?虫子


感谢您的调查。

这似乎是您的后续问题

我能够证实你描述的行为。 我还通过在服务器上运行查询验证了这是EF行为:

var rolling = mgr.Context.Rollings.Include("Itineraries").First();
var itineraries = mgr.Context.Itineraries.Local;
您会注意到,行程仅包含车辆或拖车已填充的行程(取决于fluent API定义顺序)

对我来说,它看起来像一个bug,但却是一个实体框架bug(不是Breeze的bug)


我认为微软在这方面会有更好的说法,所以将您的问题发布在。

感谢您的关注。
rollings()[0].itineraries
        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);
var rolling = mgr.Context.Rollings.Include("Itineraries").First();
var itineraries = mgr.Context.Itineraries.Local;