请帮我理解这段ASP.NET代码

时间:2014-04-07 20:13:29

标签: asp.net-mvc

我知道这个问题可能对其他人没有帮助,但我不知道任何其他地方可以提出类似的问题,因为我正在学习如何编码!如果您要删除此帖子,请告诉我在哪里可以提出此类问题?

// This part is Auto Generated
namespace SimpleScrum.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class SimpleScrumEntities : DbContext
    {
        public SimpleScrumEntities()
            : base("name=SimpleScrumEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<ProductBacklogItem> ProductBacklogItems { get; set; }
        public DbSet<Product> Products { get; set; }
        public DbSet<Role> Roles { get; set; }
        public DbSet<SprintBacklogItem> SprintBacklogItems { get; set; }
        public DbSet<Sprint> Sprints { get; set; }
        public DbSet<TeamMember> TeamMembers { get; set; }
        public DbSet<User> Users { get; set; }
        public DbSet<Today> Todays { get; set; }
    }
}
// End of Auto Generated Part

public class SprintController :BaseController {
    private readonly SimpleScrumEntities _db = new SimpleScrumEntities();

    public ActionResult Index(Guid productID) 
    {
        // what single means and why we can't change it with Where clause 
        var product = _db.Products.Include("Sprints").Single(p => p.ID == productID); 
        var indexVM  = new SprintIndex 
        {
          ProductID   = productID,
          ProductName = product.Name
        };

        foreach (var sprint in product.Sprints)               
        {                                                     
            indexVM.Sprints.Add(new SprintListItem
            { 
                ID = sprint.ID,                          
                StartDate = sprint.StartDate,            
                EndDate = sprint.EndDate                 
            });                                           
        }
  1. 产品var已在sprintController类中创建,该类将存储结果的单个返回值

    _db.Products.Include("Sprints").Single(p => p.ID == productID);
    

    但我不明白为什么在循环中我们指向product.Sprints?我们是否以及为什么我们可以访问其他属性,例如product.Roles

  2. 当我将鼠标悬停在Single中的...("Sprints").Single...子句时,它表示它返回满足特定条件的序列中唯一的元素,如果不止一个这样,则抛出异常元素存在。因此,如果产品只保留一个元素,那么在下面的代码行中我们是否在product.Sprints中有一个循环?

1 个答案:

答案 0 :(得分:0)

“Include(”Sprint“)”不返回Sprint对象。它包括请求中的相关对象/表。 MSDN

Single方法返回一个有很多sprint的产品。

_db.Products.Include(“Sprints”)。Single(p =&gt; p.ID == productID)是Product。在循环中,我们使用Sprint对象。