Entity.DbSet.Find()方法如何在MVC3上下文中工作?

时间:2011-01-22 20:36:17

标签: linq asp.net-mvc-3

我正在关注MVC3音乐商店教程,这行代码让我很困惑。

public ActionResult Details(int id)
{
    var album = storeDb.Albums.Find(id);
    return View(album);
}

这是Album.cs模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcMusicStore.ViewModels
{
    public class Album
    {
        public int AlbumId { get; set; }
        public int GenreId { get; set; }
        public int ArtistId { get; set; }
        public string Title { get; set; }
        public decimal Price { get; set; }
        public string AlbumArtUrl { get; set; }
        public Genre Genre { get; set; }
    }
}

当我访问/ Details / 5网址时,如何将'id'参数映射到相册的AlbumId属性?

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

FindDbSet的一种方法,它根据其ID在DbSet中找到一个对象。它知道你为这个类声明的映射的id。

答案 1 :(得分:1)

我想知道同样的事情并开始玩代码。看起来像Find仅适用于PrimaryKey。如果将“查找”值更改为数据库中的某个相册标题(例如“Nevermind”),则在尝试编辑相册时会出现此错误:

参数类型'Edm.Int32'和'Edm.String'与此操作不兼容。在WHERE谓词附近,第1行,第74列。

由于它明确地期望Int32,因此PrimaryKey是有意义的。真正解决问题的是针对SQL Server的实际实例运行DB的Create脚本,然后运行Profiler以查看将向DB发送哪种查询。

答案 2 :(得分:1)

这有点晚了,但我一直在寻找同样的答案。根据{{​​3}} dbset.find“使用主键值来尝试查找由上下文跟踪的实体”。所以它看起来只是搜索主键。

答案 3 :(得分:-1)

Linq没有找到方法。 linq和Mvc之间没有关系使linq以不同的方式工作。它是成员storeDb的一种方法。因此,了解find方法如何工作的最简单方法是检查storeDb的类型。