2010-10-03 106 views
0

我有多個表都用外鍵鏈接回中心表。我希望能夠在表2中創建一個新記錄,但是我遇到了麻煩,因爲我不知道如何創建表2的記錄的新實例,同時引用它將綁定到的記錄的ID。ASP.net MVC用外鍵創建表記錄

實施例:

數據庫:收集

表:收集 字段1:ID 字段2:命名

表:書 字段1:collectionId 字段2:ID 字段3 :名字

現在,我不想創建一本沒有設置collectionID的書,但我不能弄清楚這應該如何分配在控制器/視圖中。

Should Book應該有一個獨立於Collection的控制器,還是Collection控制器應該有一個createBook方法,與它自己的create方法分開?

我想從集合詳細信息視圖中調用createBook方法(從它自己的控制器或集合控制器)。

當我調用Book的創建方法時,如何創建一個新的Book,該詳細信息視圖中列出的Collection項目的詳細信息視圖中的collectionId集實例化了這本書?

我應該指出,我爲我的模型使用了實體框架,而且我絕對是新手。

感謝所有幫助

回答

1

儘量不要根據你的實體模型來創建/單獨的控制器,創建/基於UI和URL路由將它們分開。

我猜你有一個叫做「CreateBook」的視圖,它(有希望)綁定到一個強類型的「Book」實體。

當您提交表單時,您應該有一個控制器方法[HttpPost]

然後你就可以做到這一點提交書:

string bookName = Request.Form["Name"]; 
int collectionId = Request.Form["CollectionID"]; 

,或者通過將它作爲一個強類型的模型:

public ActionResult CreateBook(Book book) { } 

然後你這樣做:

Book newBook = new Book (book.Name, book.CollectionID); 
someDal.CreateBook(newBook); 

將模型導入EDMX時,請確保勾選了「在模型中包含外鍵」。

這樣做是將「CollectionID」FK添加到Book實體,允許您綁定到此實體並在每個書籍模型上訪問此屬性。

有關強加類型的ASP.NET MVC Views的CRUD操作上有一篇非常好的文章here應該讓你走上正軌。

HTH。

+0

非常感謝您的幫助! – 2010-10-03 23:04:15

+0

不用擔心隊友。 :) – RPM1984 2010-10-03 23:15:59

+0

所以,我理解這個例子,但如果我試圖自動插入正確的集合id,沒有出現在窗體上的那個元素,我該怎麼做?所以,如果collectionDetailsView有一個鏈接到createNewBook,我該如何告訴[HttpPost] createNewBook方法它的collectionID是鏈接的來源? – 2010-10-03 23:17:19