实体框架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);
鲍勃