【问题标题】:How to set up an Entity Framework data model to use one entity model for multiple views?如何设置实体框架数据模型以将一个实体模型用于多个视图?
【发布时间】:2012-12-18 14:57:08
【问题描述】:

我有多个视图,它们的记录结构完全相同,但过滤逻辑不同。我希望能够使用 Entity Framework 查询它们中的任何一个,如果它们返回相同类型的值而不是为每个视图使用不同类型(具有完全相同的成员),这似乎更自然。如何做到这一点?

我使用具有数据库优先方法的可视化模型设计器。

更新:

例如:我们可以有Vehicles表,

create view [GreenVehicles] as select * from [Vehicles] where [Color]='Green';

create view [GreenVans] as select * from [GreenVehicles] where [Type]='Van';

任务是使我们能够将GreenVans 查询为GreenVehicles 的集合。

【问题讨论】:

  • 你的意思是使用同一组数据吗?还是只保留数据模型,而不考虑数据?
  • 我的意思是为多个数据集提供单个记录实体类。所以查询表/视图 a 和表/视图 b(具有完全相同的字段定义)的结果将属于同一类型。
  • 如果您使用代码优先,您可以创建多个上下文类,将类型映射到每个不同的视图。这是我在 EF 中看到的唯一选择。我必须承认我从未尝试过,所以如果你这样做,我不确定 EF 是否有一些“惊喜”。
  • 你在使用EF继承吗?

标签: .net entity-framework


【解决方案1】:

[更新/3]

我完全删除了我的原始示例,因为它与澄清无关。您正在寻找的是返回 IQueryable 对象并在对其执行之前向其添加过滤器。这(在我的理解)将导致所有工作仍然在服务器端完成,可以在这里找到一个很好的讨论:

http://codethinked.com/keep-your-iqueryable-in-check

欢迎指正!

【讨论】:

  • 这里你在模型代码级别进行过滤。但在我的情况下,过滤是在 SQL Server 端完成的 = 已经准备好 GreenVehiclesGreenVehicles 视图,我要从中读取记录,而不是直接从 Vehicles 表中读取。我需要查询_context.GreenVans 并得到ICollection<GreenVehicles> 作为结果(假设GreenVehiclesGreenVans 具有完全相同的成员字段集)。
  • 我的示例在这里受到内存的限制,所以是的,使用上下文和 where 将为您提供一个集合(不是您想要的),但我确信我已经在某个地方完成了此操作,我返回一个 IQueryable然后在实际导致 DB 调用执行之前完成进一步的过滤。这似乎在同一条轨道上? codethinked.com/keep-your-iqueryable-in-check
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2010-11-28
  • 2012-07-03
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多