我正在关注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属性?
感谢您的帮助。
答案 0 :(得分:3)
Find
是DbSet
的一种方法,它根据其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
的类型。