MVC Music Store链接表数据

时间:2012-07-17 04:37:39

标签: c# asp.net-mvc entity-framework-4 ef-database-first

我一直在看这个问题大约两个星期了,并且认为是时候我会寻求帮助......

我正在尝试在第8部分中使用MVCMusicStore购物车教程:http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-8。我的项目的主要区别在于我使用的是Database First(而不是Code First,用于实时/托管数据库的MVC实践)。

班级代码:

public partial class Cart
{
    public int RecordId { get; set; }
    public string CartId { get; set; }

    public int AlbumId { get; set; }

    public Nullable<int> Count { get; set; }
    public Nullable<System.DateTime> DateCreated { get; set; }

    public virtual Album Album { get; set; }
}

public partial class Album
{
    public int AlbumId { get; set; }
    public Nullable<int> GenreId { get; set; }
    public Nullable<int> ArtistId { get; set; }
    public string Title { get; set; }
    public Nullable<decimal> Price { get; set; }
    public string AlbumArtUrl { get; set; }

    public virtual Genre Genre { get; set; }
    public virtual Artist Artist { get; set; }
}

public class ShoppingCartViewModel
{
    public List<Cart> CartItems { get; set; }
    public decimal CartTotal { get; set; }
}

在ShoppingCartViewModel中填充CartItems的函数:

public List<Cart> GetCartItems()
{
    return db.Carts.Where(cart => cart.CartId == ShoppingCartId).ToList();
}

.cshtml页面:

@model BoothPimps.ViewModels.ShoppingCartViewModel

@foreach (var item in Model.CartItems) 
{ 
    <tr id="row-@item.RecordId"> 
        <td>
            @Html.ActionLink(item.Album.Title, "Details", "Store", new { id = item.AlbumId }, null)
        </td>
    </tr> 
}

这是Model.CartItems的图像,除了链接的Album数据外,还填充了所有内容: http://s1253.photobucket.com/albums/hh585/codingcoding1/?action=view&current=image1.jpg (项目名称在任何地方被删除)

此处的代码错误:

@Html.ActionLink(item.Album.Title, "Details", "Store", new { id = item.AlbumId }, null)

问题:item.Album始终为null。

Album.AlbumId = Cart.AlbumId应该将相册数据链接到购物车,这样它就不会返回null但它不起作用。在之前的教程中,当我做同样的事情但是从Album获取Genre或Artist数据时,链接的数据可以工作,我能够检索这些值,如下所示:

@Html.DisplayFor(model => model.Genre.Name)
@Html.DisplayFor(model => model.Artist.Name)

那怎么来model.Genre和model.Artist返回值但是item.Album是null?我不是使用“virtual”关键字以相同的方式链接这些值吗?我错过了什么?

感谢您查看此内容。

2 个答案:

答案 0 :(得分:0)

你有没有机会在购物车中确实有一个项目,因为它的专辑是空的? 尝试在此操作结束时放置断点,并检查模型的组成部分。

使用调试器查找不再有item.Album的点,同时确保检查数据库中是否有没有Album的项目。 一旦你知道错误来自哪里,你很可能能够解决它,但如果没有,请在此发布你的发现。

答案 1 :(得分:0)

想出来。

myProject.Context.cs(从.edmx文件生成)在Web.Config文件中生成了新的connectionString信息,我不得不在我的代码中引用它。我的不正确的代码实际上使用的是较旧版本的Entities对象,应该指向新的。

private Entities = new Entities();
// private MyProjectDb = new MyProjectDb();

由于MVC音乐商店教程使用了Code First和伪数据,因此出现了混乱,所以我没有意识到我必须在以后更改这段代码。