Asp.net mvc 4 如何使用带有复合主键的ASP.NET MVC4/EF5脚手架?

Asp.net mvc 4 如何使用带有复合主键的ASP.NET MVC4/EF5脚手架?,asp.net-mvc-4,visual-studio-2012,entity-framework-5,composite-primary-key,ef-database-first,Asp.net Mvc 4,Visual Studio 2012,Entity Framework 5,Composite Primary Key,Ef Database First,我使用Visual Studio 2012(Web Express),并通过以下方式创建一个简单的ASP.NET MVC应用程序(使用数据库优先的方法)。我的问题是,对于使用复合主键的表,脚手架系统不能正常工作 我的表格如下: CREATE TABLE [dbo].[Unit]( [UnitOid] [int] NOT NULL, /*other stuff*/ [ReplicationId] [int] NOT NULL, CONSTRAINT [PK_Unit] P

我使用Visual Studio 2012(Web Express),并通过以下方式创建一个简单的ASP.NET MVC应用程序(使用数据库优先的方法)。我的问题是,对于使用复合主键的表,脚手架系统不能正常工作

我的表格如下:

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的脚手架系统真的不能开箱即用吗?


注:此问题与。但是,我再次询问的是工具的当前版本。

因为您有一个复合键,所以需要同时提供两个值。注意,它采用param属性,所以您可以只执行
db.Units.Find(id,id2)
。如果您只有密钥的一部分,则需要查询数据库并获得多个结果,因为数据库中可能有许多实体的密钥部分与您提供的相同。

是的,我已经手动完成了此操作。但问题是,我是否在脚手架上做错了什么,首先是为了防止它使用这两把钥匙。