如何解决实体框架4.1,MVC3 JsonResult和循环引用
| 我正在尝试学习ASP.NET MVC3的Entity Framework Code First开发。 假设我有一个用于竞价和出价的简单数据模型,我想查询所有竞价及其出价。 我已关闭LazyLoadingEnabled和ProxyCreationEnabled。 这是我的代码:public class MiCoreDb2Context : DbContext
{
public MiCoreDb2Context()
: base()
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
public DbSet<Auction> Auctions { get; set; }
public DbSet<Bid> Bids { get; set; }
}
public class Auction
{
public int AuctionId { get; set; }
public virtual ICollection<Bid> Bids { get; set; }
}
public class Bid
{
public long BidId { get; set; }
public int AuctionId { get; set; }
[ForeignKeyAttribute(\"AuctionId\")]
public virtual Auction Auction { get; set; }
}
public JsonResult Thing()
{
List<Auction> auctions;
using (var db = new MiCoreDb2Context())
{
var auctions = (from a in db.Auctions.Include(\"Bids\") select a).ToList();
}
return Json(auctions,JsonRequestBehavior.AllowGet);
}
当我加载页面时,会发生循环引用。我将如何解决这个问题?
解决方法
当我加载页面时,会发生循环引用。我将如何解决这个问题?
通过使用视图模型(以及对您可能对ASP.NET MVC的任何问题的回答:)。 Ayende Rahien在这个主题上有一系列出色的博客文章。
结论:绝对总是将视图模型传递到视图或从视图中获取视图模型。绝对不要在视图之间传递/获取模型(EF,域等)。一旦遵守了这一基本原则,您就会发现一切正常。
,我通过在Linq to Entities查询中进行投影解决了这个问题。这将创建匿名类型,该类型可以序列化为json而没有任何循环引用问题。
var result =
from Item in dbContext.SomeEntityCollection
where SomePredicate
select new { Property1 = Item.Property1,Property2 = Item.Property2 };
Return Json(result,JsonRequestBehavior.AllowGet);
鲍勃
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。