我正在寻找有关下拉列表选择的体面模式和 POCO EF 选择持久性的建议。
我的视图模型中有一个列表,IEnumerable<Country>
其中 Country 是通过 EF 加载的 POCO。视图模型上有一个 Address 属性,它在其 Country 属性上采用当前或用户选择的值。在视图中,我通过 Html.DropdownListFor() 显示这些:
Html.DropDownListFor(model => model.Address.Country.Id, new SelectList(Model.Countries,"Id","Name",model.Address.Country.Id)
到目前为止一切都很好,并且默认 ModelBinder 为我提供了一个填充了 Address.Country 的视图模型,这一切都适用于回发。但是 Address.Country 当然只填充了具有默认模型绑定的 Id 字段。
尝试通过 EF 将地址更新发送回数据库会失败,因为这被视为一个新对象,它没有加载完整的对象图,只有 Id 集。
现在我可以通过在基于所选 ID 保存之前将完整的 Country 对象从 db 加载到回发时的 Address.Country 属性中来解决此问题。但是对于一个简单的对象图之外的任何东西,这似乎都是一项艰巨的工作。
我能想到的最“优雅”的解决方案是 Country 的自定义模型绑定器,但这需要模型绑定器了解用于检索完整 EF 对象的存储库,这对我来说似乎不合适。我还必须对下拉列表中使用的所有其他实体重复此操作。
希望这是有道理的,任何关于其他人如何做到这一点的反馈将不胜感激。