我有一个非常简单的示例,我正在尝试使用以下架构进行设置...
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,因此我是从我的 DBContext 的 Fluent API 手动编码。下面的上下文代码,“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;
}
}
一切正常,我正在通过热毛巾模板中的一个项目测试所有 CRUD 操作,但是当我从控制器查询 Foos 时,json 数据看起来很完美,但是当它传输到 Breeze/Knockout Observables 时,每个“Foo.酒吧”列表是错误的。它采用 Bar.Id = 1 并始终将其放在 Foo.Id = 1、Bar.Id = 2 并将其放在 Foo.Id = 2 上,依此类推。即使在我的示例中 Bar.Id = 2 应该在 Foo.Id = 1 上。