Asp.net mvc 4 如何使用带有复合主键的ASP.NET MVC4/EF5脚手架?
我使用Visual Studio 2012(Web Express),并通过以下方式创建一个简单的ASP.NET MVC应用程序(使用数据库优先的方法)。我的问题是,对于使用复合主键的表,脚手架系统不能正常工作 我的表格如下: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
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)
。如果您只有密钥的一部分,则需要查询数据库并获得多个结果,因为数据库中可能有许多实体的密钥部分与您提供的相同。是的,我已经手动完成了此操作。但问题是,我是否在脚手架上做错了什么,首先是为了防止它使用这两把钥匙。