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