2014-04-07 133 views
-3

我知道这个问题可能对其他人没有帮助,但我不知道任何其他地方可以提问类似的问题,因为我只是在学习如何编写代码!如果你删除这个帖子,请让我知道我在哪里可以问这种类型的问题?请帮我理解这段ASP.NET代码

// 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. 产品的变种已经在sprintController类是要存储结果

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

    的一个返回值被创建,但我不明白为什么在循环中,我们”重新指向product.Sprints?我们和为什么我们可能有权访问其他属性,例如product.Roles

  2. 当我悬停在...("Sprints").Single...Single子句据说它返回满足特定条件的序列中的唯一元件,并且如果多于一个这样的元素存在抛出异常。因此,如果产品将只保留一个元素,那么我们在product.Sprints中有一个循环?

回答

0

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

Single方法返回一个有许多冲刺的产品。

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

+0

非常感谢!我在哪里可以找到Linq命令的参考帮助,以便我更好地理解它们?还有关于已创建的产品变量,是否可以访问其他产品属性?像TeamMembers或..? – curiousStudent

+0

@curiousStudent我认为,您可以阅读关于实体框架(和代码优先),LINQ的任何文章,并了解它们的工作原理。 – eXit

+0

@curiousStudent检查http://www.asp.net/mvc/tutorials它可能有帮助 – eXit