【问题标题】:Entity Framework 4.1, MVC3 JsonResult and Circular References实体框架 4.1、MVC3 JsonResult 和循环引用
【发布时间】:2011-04-15 14:11:02
【问题描述】:

我正在尝试学习使用 ASP.NET MVC3 进行实体框架代码优先开发。

假设我有一个用于拍卖和出价的简单数据模型,我想查询所有拍卖及其出价。

我已经关闭了 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);
}

当我加载页面时,会发生循环引用。我将如何解决这个问题?

【问题讨论】:

    标签: json asp.net-mvc-3 entity-framework-4.1


    【解决方案1】:

    当我加载页面时,会发生循环引用。我将如何解决这个问题?

    通过使用视图模型(顺便说一句,这可以回答您可能对 ASP.NET MVC 提出的任何问题 :-))。 Ayende Rahien 有一个关于这个主题的excellent series of blog posts

    结论:绝对总是将视图模型传递到视图或从视图传递视图模型。绝对不要将模型(EF、域、...)传递到视图/从视图传递/获取模型。一旦这个基本规则得到尊重,你就会发现一切正常。

    【讨论】:

      【解决方案2】:

      我通过在 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);
      

      BOb

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-07
        • 2011-08-12
        相关资源
        最近更新 更多