2

我使用 Visual Studio 2012 (Web Express) 并且我正在创建一个简单的 ASP.NET MVC 应用程序,(使用 Database-First 方法)按照hector espinosa 的这个很好的指南。我的问题是,对于使用复合主键的表,脚手架系统无法正常工作。

我的表如下:

CREATE TABLE [dbo].[Unit](
    [UnitOid] [int] NOT NULL,
    /*other stuff*/
    [ReplicationId] [int] NOT NULL,
 CONSTRAINT [PK_Unit] PRIMARY KEY CLUSTERED 
(
    [UnitOid] ASC,
    [ReplicationId] ASC
)

脚手架生成控制器和视图,但只要我单击编辑或详细信息链接,唯一使用的标识符就是第一个 ( UnitOid) 值。

控制器中的示例操作:

public ActionResult Details(int id = 0)
{
    Unit unit = db.Units.Find(id); // throws an ArgumentException
    if (unit == null)
    {
        return HttpNotFound();
    }
    return View(unit);
}

异常消息非常清楚:

“传递的主键值的数量必须与实体上定义的主键值的数量相匹配”

MVC4 / EF5 / VisualStudio 2012 的脚手架系统真的不能开箱即用吗?

注意:这个问题与这个问题非常相似。但是,我正在重新询问工具的当前版本。

4

1 回答 1

2

由于您有一个复合键,因此您需要提供这两个值。请注意,Find采用 param 属性,因此您只需执行db.Units.Find(id, id2). 如果您只有密钥的一部分,您将需要查询数据库并期望多个结果,因为数据库中可能有许多实体,您提供的密钥部分是相同的。

于 2013-03-12T02:47:40.017 回答