底线在前
有没有一种简洁的方法可以限制可以属于实体框架中父级的子实体的数量。我现在使用的是4.3.1。
问题
我正在开发一个 ASP.NET MVC3 站点,它通过使用实体框架的数据访问层访问数据。我有一个 SearchList 实体,它与搜索实体具有多对多关系。一个SearchList可以有多个Search,一个Search也可以属于多个SearchList。
在网站工作流程的某一时刻,用户需要选择要在批量搜索中使用的搜索和其他项目。我们希望页面加载整个搜索列表。
搜索列表可能会变得非常大,作为测试,我们创建了一个包含 21,000 次搜索的列表。花了几秒钟,返回的数据约为 9.5 MB,这是我们所期望的,但 jQueryUI 在尝试表化这么多数据时感到窒息。
我们想要什么
因此,我们希望对任何搜索列表可以进行的搜索数量施加限制。我可以浏览该应用程序并放入一堆规则来检查集合的大小以及尝试添加的搜索是否加上当前的大小... yada yada yada。
然而,如果有更好的方法(尤其是可以轻松输出 MVC 会接收到的错误消息的方法),我完全会采用这种方法。
我用谷歌搜索,并仔细阅读了一些 EF 博客,但无济于事。约束集合中的子级和最大子级数,类似的搜索已返回有关 Linq 查询以及 Count 和 Max 方法的结果。
任何帮助,将不胜感激。
没有内置的方法,因此您必须自己编写此类验证代码。一些快速的想法:
- 例如,您可以使用导航属性的自定义集合,当您尝试添加超过阈值的其他搜索时,该属性将引发异常。它很简单,但它要求您加载所有搜索,它会存在并发问题,而且它可能会在加载搜索列表和从数据库搜索时触发。
- 您可以在重写中处理它
SaveChanges
。您至少必须检查有多少搜索已经与搜索列表相关,但您仍然会遇到并发问题(如果其他请求尝试将搜索添加到同一列表但只剩下一个位置该怎么办 - 两者都可以成功检查并插入相关搜索)
- 您可以在数据库触发器中处理它 - 再次它会出现并发问题
完全避免并发问题需要带有锁定提示的手写查询,以确保只有一个请求可以检查每个搜索列表的搜索数量并在原子事务中插入新的搜索。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)