C# 实体框架包括但不包括关系

C# 实体框架包括但不包括关系,c#,sql-server,database,entity-framework,C#,Sql Server,Database,Entity Framework,我正在使用实体框架进行一个大型项目。因为我使几乎所有实体都依赖于时间,所以不可能再使用实体之间的关系(我自己管理关系)。 出现的问题是,我不再能够像以前那样轻松地查询数据。 假设我有一个名为Student的实体。此实体包含属于该学生的书籍集(列表)。每本书都包含一个来自数据库的author属性。 要加载所有学生的书和相应的作者,我要么编写数百个自定义查询(f.e.linq),要么延迟加载,这会对性能产生很大影响。 事实上,如果我可以使用实体框架的内部,而不使用关系,那就太好了。有人知道如何做到这

我正在使用实体框架进行一个大型项目。因为我使几乎所有实体都依赖于时间,所以不可能再使用实体之间的关系(我自己管理关系)。 出现的问题是,我不再能够像以前那样轻松地查询数据。 假设我有一个名为
Student
的实体。此实体包含属于该学生的
书籍集
(列表)。每本书都包含一个来自数据库的author属性。 要加载所有学生的书和相应的作者,我要么编写数百个自定义查询(f.e.linq),要么延迟加载,这会对性能产生很大影响。
事实上,如果我可以使用实体框架的内部,而不使用关系,那就太好了。有人知道如何做到这一点吗?谢谢。

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

更新

在实体框架中,实施审计跟踪是一个相当标准的过程,可能比管理关系容易得多。审计跟踪基本上包括为
Context_SavingChanges()
方法设置一个事件处理程序,然后通过
ObjectStateManager
处理新数据和旧数据。在该循环中添加逻辑还可以使不在特定时间范围内的添加/更新无效或拒绝


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

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

谢谢你,安德鲁!我决定删除所有关系,因为我需要所有数据保留在数据库中,并且一个条目可以随时间具有不同的值。此外,实体之间的关系只能在特定的时间范围内有效。我不知道如何使用实体框架关系实现这样一个系统?似乎不支持这样的场景。但是我认为应该可以编写一个自定义的Include方法扩展,其中包含一个额外的参数,该参数定义了关系(应该与哪个表(DbSet)进行连接,以及外键是哪个)。知道如何做吗?在Entity Framework中有一些方法可以实现审计跟踪,管理人际关系的有效性是很容易的。。。我会用一些链接更新我的答案。谢谢安德鲁给我时间!我很感激。过去我经常使用审计跟踪,但这次应该可以在一秒钟内将整个系统的状态更改为特定的时间点。换句话说,应该可以同时模拟两个不同的时间点。你能告诉我更多关于[NotMapped]属性的信息吗?通过另一个名为IncludeNotAppedRelation的方法(此IQueryable、属性、relationToDbSet、foreignKey)扩展IQueryable是否不可能?