ASP.net MVC用外键创建表记录

时间:2010-10-03 22:05:58

标签: asp.net asp.net-mvc

我有多个表都链接回带有外键的中央表。我希望能够在表2中创建一个新记录,但是我遇到了麻烦,因为我不知道如何创建表2记录的新实例,同时引用它将绑定到的记录的ID。 / p>

实施例

数据库:集合

表:收集 字段1:id 字段2:名称

表:书 字段1:collectionId 字段2:id 字段3:名称

现在,我不想在没有设置它的集合ID的情况下创建一本书,但我无法弄清楚如何在控制器/视图中划分它。

Book应该有一个与Collection分开的控制器,或者Collection控制器是否有一个createBook方法,与它自己的create方法分开?

我想从Collection Details视图中调用createBook方法(来自它自己的控制器或Collection控制器)。

当我调用Book的create方法时,如何使用在详细信息视图中列出的Collection项的详细信息视图中设置collectionId来实例化新Book?

我应该指出,我正在为我的模型使用实体框架,我对此肯定是新手。

感谢您的帮助

1 个答案:

答案 0 :(得分: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视图的CRUD操作有一篇非常好的文章here,应该让你走在正确的轨道上。

HTH。