【问题标题】:Dynamically loading SQL tables in Entity Framework在实体框架中动态加载 SQL 表
【发布时间】:2011-06-29 22:22:10
【问题描述】:

我需要使用实体框架动态访问一些 SQL 表。这是一些伪代码:

var Account = DB.Accounts.SingleOrDefault(x => x.ID == 12345);

这将返回一个 Account 对象,其中包含一些名为“PREFIX”、“CAMPAIGN ID”的字段,有关帐户的更多信息存储在单独的 SQL 表中,命名约定为 PREFIX_CAMPAIGNID_MAIN。

这些表都有相同的字段,所以我想创建一个未映射到任何地方的新实体,然后动态加载它,如下所示:

var STA01_MAIN = new MyAccount(); // my "un-mapped" entity

DB.LoadTable('STA01_MAIN').LoadInto(STA01_MAIN);

我现在可以获取有关 STA01_MAIN 帐户的任何信息:STA01_MAIN.AccountId

所以我的问题是:如何使用实体框架访问这些表?

【问题讨论】:

  • 您将映射它们,您将直接使用 SQL 查询它们,否则您将无法访问它们。亚当的回答是正确的。

标签: c# asp.net sql entity-framework asp.net-mvc-2


【解决方案1】:

我不认为 EF 有 LoadTable 和 LoadInto 方法,但 ObjectOntext.ExecuteStoreQuery 可能是您正在寻找的:

http://msdn.microsoft.com/en-us/library/dd487208.aspx

这应该允许您对数据库执行任意查询,然后将结果映射到您指定的任意类型(即使它没有在 EF 中以其他方式映射)。

不用说,您将负责组合一个查询,该查询提供了映射到目标类型所需的列,并在此类型更改时调整所述查询。

这里有一些关于它的用法的进一步讨论

http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/44cf5582-63f8-4f81-8029-7b43469c028d/

您是否考虑过将所有这些表(具有相同的列)映射到 EF 中的继承关系,然后将它们查询为

db.BaseTypes.OfType<SpecificType>().Where(/*.....*/);

【讨论】:

  • +1 正确答案。这种继承模型称为每类表 (TPC)。
  • 这似乎是我想要的,谢谢亚当!我会映射所有表,但实际上它们有数千个(等待 VS 将它们全部加载很有趣)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多