1

我有一个非常简单的示例,我正在尝试使用以下架构进行设置...

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 上。

4

0 回答 0