实体框架包含无关系

时间:2013-10-06 13:51:47

标签: c# sql-server database entity-framework

我正在使用Entity Framework开发一个庞大的项目。因为我几乎所有实体都依赖于时间,所以不可能再使用实体之间的关系(我自己管理关系)。 出现的问题是我不再能够像以前那样轻松地查询数据。 假设我有一个名为Student的实体。该实体包含属于学生的Books(列表)集合。每本书都包含一个作者属性,该属性也来自数据库。 要使用他们的书和相应的作者加载所有学生,我要么必须编写数百个自定义查询(f.e.linq),要么我懒得加载它们,这会对性能产生很大影响。 实际上,如果我可以在没有关系的情况下使用实体框架,那就太棒了。有谁知道如何实现这一目标?谢谢。

2 个答案:

答案 0 :(得分:3)

如果Entity Framework没有管理表之间的关系,那么就无法使用.Include()来创建SQL调用中的连接。您最好的选择是将相关实体正常添加到父级,但使用[NotMapped]属性。然后,您可以使用自定义SQL调用来执行查找,并在需要时填充属性。但是,我很困惑,你的陈述是因为实体是“时间相关的”,你不能使用关系,这些关系只是数据库中的外键......也许你可以做些其他事情来优化你的实体。如果您正在管理自己的项目之间的关系,那么您将从数据库中卸下很多责任到您的应用程序中,这似乎已经做了很多工作。

<强>更新

实施审计跟踪是实体框架中相当标准的过程,可能比管理关系容易得多。审计跟踪主要涉及为Context_SavingChanges()方法设置事件处理程序,然后通过ObjectStateManager处理新数据和旧数据。在此循环中添加逻辑,您也可以使无效或拒绝不属于特定时间范围的添加/更新。

审计管理器的一个很好的例子是CodeProject,其中作者演示了一种方法,不仅可以存储审计信息,还可以回滚。

答案 1 :(得分:-1)

如果实体之间没有主键和外键关系,则不能使用Include方法。