2

我使用Visual Studio 2012(Web Express),我创建了一个简单的ASP.NET MVC应用程序,(使用数据库优先方法)遵循this nice guide by hector espinosa。我的问题是,对于使用复合主键的表格,脚手架系统无法正常工作。如何将ASP.NET MVC4/EF5脚手架与复合主键结合使用?

我的表如下:

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的脚手架系统盟友无法处理那个盒子?

注意:这个问题与this one很相似。不过,我正在重复询问当前版本的工具。

回答

2

既然你有一个组合键,你需要提供两个值。请注意,Find需要参数属性,因此您可以只执行db.Units.Find(id, id2)。如果您只有一部分密钥,则需要查询数据库并期望获得多个结果,因为数据库中可能存在许多实体,其中您提供的密钥部分是相同的。

+0

是的,我已经手动完成了。但问题是,我是否对脚手架做了错误的事情,以防止它首先使用这两个键。 – Marcel 2013-03-12 06:48:09

+1

我不知道。您只需提交一个错误:http://aspnetwebstack.codeplex.com – Pawel 2013-03-12 16:08:42