【发布时间】:2011-03-01 12:40:31
【问题描述】:
我已经以不同的形式处理同一个问题有一段时间了(参见例如Entity Framework and MVC 3: The relationship could not be changed because one or more of the foreign-key properties is non-nullable),但它仍然困扰着我,所以我想我应该更笼统地说一下:
我觉得这不会是一个很不寻常的问题:
你有一个实体对象(使用实体框架),比如用户。 User 有一些简单的属性,例如 FirstName、LastName 等。但它也有一些对象属性列表,以众所周知的示例 Emails 为例,使这变得简单。电子邮件通常设计为对象列表,以便您可以向该对象添加地址和类型(家庭、工作等)属性。我用这个作为一个例子来保持它的通用性,但它可以是任何东西,关键是,你希望用户能够添加任意数量的这些项目。您还应该能够删除项目(旧地址或其他)。
现在,在普通网页中,您希望能够在同一个视图中添加这些项目。但是,如果您调用一个全新的 View 只是为了添加地址,MVC 似乎设计的只是使执行此操作变得容易。 (例如,在索引视图的模板中,您会看到“新建”链接)。
我遇到了几个例子,它们的作用与我在这里的意思很接近:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
和
http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/
问题是,尽管这些站点上的示例项目工作正常,使用模拟模型对象和简单的列表(不是具有子列表的对象),但如果您真的想对发布的信息做一些事情,那就是另一回事了- 在我的情况下,通过实体框架模型保存到数据库。为了适应这些情况,突然间我陷入了错综复杂且绝对不是 DRY 代码的迷宫中……用 AutoMapper 之类的东西玩弄对象,而实体框架不会让你保存等等(见上文如果您对详细信息感兴趣,请链接)。
我想知道的是,这真的有可能是一件如此不寻常的事情吗?在与父对象相同的视图中更新子集合(例如本例中的电子邮件地址)?在我看来,这根本不常见,必须有一种标准的方法来处理这种情况,而我只是想念它(到目前为止,这里没有人能够指出我的直截了当解决方案,也许是因为我用自己的应用程序示例使其过于抽象)。
所以如果有一个简单的解决方案可以解决我认为应该是一个简单的问题(因为设计如此普遍),请告诉我。
【问题讨论】:
标签: asp.net entity-framework asp.net-mvc-3 one-to-many