我正在使用实体框架进行一个巨大的项目。因为我使几乎所有实体都与时间相关,所以不再可能使用实体之间的关系(我自己管理关系)。出现的问题是我不再能够像以前那样轻松地查询数据。假设我有一个名为Student
. 该实体包含Books
属于学生的 (List) 集合。每本书都包含一个作者属性,该属性也来自数据库。要加载所有学生的书和相应的作者,我要么必须编写数百个自定义查询(fe linq),要么延迟加载它们,这会对性能产生很大影响。实际上,如果我可以在没有关系的情况下使用实体框架的 Inlude,那就太好了。有谁知道如何实现这一目标?谢谢你。
问问题
3990 次
2 回答
3
如果实体框架不管理表之间的关系,那么它就无法使用.Include()
在 SQL 调用中创建连接的方法。您最好的选择是像往常一样将相关实体添加到父级,但使用[NotMapped]
属性。然后,您可以使用自定义 SQL 调用来执行查找并在需要时填充属性。但是,我对您的陈述感到困惑,因为实体是“时间相关的”,您不能使用关系,这些关系只是数据库中的外键......也许您可以做一些其他事情来优化您的实体。如果您正在管理自己的项目之间的关系,那么您正在将大量责任从数据库转移到您的应用程序中,这似乎已经是很多工作了。
更新
在 Entity Framework 中实施审计跟踪是一个相当标准的过程,并且可能比管理您的关系容易得多。审计跟踪基本上涉及为该Context_SavingChanges()
方法提供一个事件处理程序,然后通过ObjectStateManager
. 在此循环中添加逻辑,您还可以使不属于特定时间范围内的添加/更新无效或拒绝。
审计管理器的一个很好的例子是在CodeProject上,作者在其中演示了一种不仅可以存储审计信息而且还可以回滚的方法。
于 2013-10-06T14:25:46.827 回答
-1
如果实体之间没有主键和外键关系,则不能使用 Include 方法。
于 2019-07-17T04:07:05.723 回答