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