我有一个名为accounts的表,如下所示:
[Key]
public int SiteID { get; set; }
[Key]
public long AccountID { get; set; }
public string Name { get; set; }
public string AccountCode { get; set; }
public string AccountType { get; set; }
我正在尝试使用Entity Framework在SiteID = 999999的表中显示信息。 我试图使用db.Find方法显示siteID列表,其中siteID = 999999。
我目前的代码: index.cshtml
@Html.ActionLink("Mapping","ConfigureMapping", new { id = item.SiteID })
控制器
Account account = SiteDatabase.Accounts.Find(id);
if (account == null)
{
return HttpNotFound();
}
return View(account);
但是抱怨只收到2个主键中的1个: “传递的主键值的数量必须与实体上定义的主键值的数量相匹配。”
我该怎么做???
答案 0 :(得分:2)
Find
方法返回单个对象,而不是集合。如果您想要SiteID = 999999的所有记录,请使用Where
方法获取已过滤的列表。
例如,
List<Account> accountList = SiteDatabase.Accounts.Where(a=>a.SiteID==id).ToList();
其中id
的值为999999
或其他有效的网站ID值
如果您想要一个项目,可以使用FirstOrDefault
作为Find
的替代选项
Account account = SiteDatabase.Accounts.FirstOrDefault(a=>a.SiteID==id);
请注意,这将返回第一场比赛。因此,如果您有2条具有相同SiteID
值(但不同AccountID
)的记录,则它将返回第一个记录,可能不是您要查找的记录。因此,我建议您根据唯一键值(唯一键值组合)获取记录。也许您也可以从ui传递帐户ID并使用它(以及siteId)来获取所需的单一对象。
答案 1 :(得分:0)
您还需要为查找提供另一个键,首先将其添加到actionlink:
@Html.ActionLink("Mapping","ConfigureMapping", new { id = item.SiteID, accountID = item.AccountID })
将参数添加到控制器,然后在查找中使用它:
Account account = SiteDatabase.Accounts.Find(id, accountID);