发布:2023/12/7 15:12:45作者:大数据 来源:大数据 浏览次数:439
asp.net-mvc json 实体框架entity-framework knockout.js
我有一个实体5码模型首先用多对多的关系 即
1 2 3 4 5 6 7 8 9 10 11 |
Public class Product { public int ProductId {get;set;} public ICollection<Category> Categories {get;set;} } Public class Category { public int CategoryId {get;set;} public ICollection<Product> Products {get;set;} } |
我用fluent的创建实际的关系,
1 2 3 4 5 6 7 8 9 10 |
modelBuilder.Entity<Product>() .HasMany(p => p.Categories) .WithMany(c => c.Products) .Map(m => { m.ToTable("ProductsToCategories"); m.MapLeftKey("Products_ProductId"); m.MapRightKey("ProductCategories_ProductCategoryId"); }); |
现在,当我取回我的数据被检索产品及产品为一堆的类,但每个类别也有一堆产品一样好,所以它递归各地。 但问题是,这是严重破坏时,我那连载到JSON由前端(我击倒 CodeGo.net,但毕竟是种不相关)。 我试着转动延迟加载过,当我得到我的产品包括:
1 2 |
db.Products.Include("Categories").ToList() |
但是这仍然是那么执行每个类别中的产品递归聚会。 任何想法? 问候
本文地址 :CodeGo.net/4347775/
-------------------------------------------------------------------------------------------------------------------------
1.你可以的业务对象,而不是数据库的直接对象。在这种方式下,你只能从侧面引用,说:
1 2 3 4 5 6 7 8 9 10 |
Public class Product { public int ProductId {get;set;} public IList<Category> Categories {get;set;} } Public class Category { public int CategoryId {get;set;} } |
2. 你有产品和类别之间的循环引用。 换句话说产品有关系类别和类别有关系到产品。 所以,你需要做的就是删除这些关系之一。 我会做这样的:
1 2 3 4 5 6 7 8 9 10 11 |
var categoriesGraph = db.Categories.Include("Products").ToList(); var data = categoriesGraph.Select(c => new { c.CategoryId, Products = c.Products.Select(p = > new { p.ProductId, CategoriesID = p.Categories.Select(c => c.CategoryId).ToArray(), // don't add the categories. }).ToArray() }).ToArray(); |
我希望它能帮助。
3. 你可以告诉Json.Net只是忽略循环引用:
1 |
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; |
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4