我有一个非常简单的例子,我试图使用以下架构进行设置......
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public string SomethingVeryBig { get; set; }
public List<Bar> Bars { get; set; }
}
public class Bar
{
public int Id { get; set; }
public int FooId { get; set; }
public string Name { get; set; }
}
我想要测试的是以与数据存储库断开连接的方式使用Breeze,因此我使用Fluent API手动编码我的DBContext。下面的上下文代码,“FoosDb”只是一个与Breeze元数据项目一起部署的sdf文件,并不是我们将数据保存到的真实数据库。
public class FoosDbContext : DbContext
{
public FoosDbContext() : base(nameOrConnectionString: "FoosDb")
{
Database.SetInitializer<FoosDbContext>(null);
}
public DbSet<Foo> Foos { get; set; }
public DbSet<Bar> Bars { get; set; }
public DbSet<Link> Links { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>().HasKey(f => f.Id);
modelBuilder.Entity<Bar>().HasKey(b => b.Id);
modelBuilder.Entity<Foo>().HasMany(f => f.Bars).WithRequired().HasForeignKey(b => b.FooId);
}
}
public class FoosContextProvider : EFContextProvider<FoosDbContext>
{
public FoosContextProvider() : base() { }
protected override List<KeyMapping> SaveChangesCore(Dictionary<Type, List<EntityInfo>> saveMap)
{
return new List<KeyMapping>();
}
protected override bool BeforeSaveEntity(EntityInfo entityInfo)
{
return true;
}
protected override Dictionary<Type, List<EntityInfo>> BeforeSaveEntities(Dictionary<Type, List<EntityInfo>> saveMap)
{
// return a map of those entities we want saved.
return saveMap;
}
}
一切都很好,我正在通过Hot Towel模板中的项目测试所有CRUD操作,但是当我从我的控制器查询Foos时,json数据看起来很完美,但是当它转移到Breeze / Knockout Observables时,每个数据都是“Foo.Bars”列表是错误的。它取Bar.Id = 1并始终将其放在Foo.Id = 1,Bar.Id = 2并将其放在Foo.Id = 2上,依此类推。即使在我的例子中,Bar.Id = 2应该在Foo.Id = 1。