我有多个表都链接回带有外键的中央表。我希望能够在表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?
我应该指出,我正在为我的模型使用实体框架,我对此肯定是新手。
感谢您的帮助
答案 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。