NavigationProperty有错误的数据

时间:2013-07-11 18:35:25

标签: breeze

我有一个非常简单的例子,我试图使用以下架构进行设置......

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。

0 个答案:

没有答案