【问题标题】:How do i map dynamic tables with diffrent schema names如何映射具有不同架构名称的动态表
【发布时间】:2012-04-05 06:02:45
【问题描述】:

我有一个表,名称如

JS Engineering Services$Web 用户设置标题 Sachin Sales & Service Pvt Ltd$Web 用户设置标题

如何使用 Ado.net 实体框架 POCO 代码优先方法映射这些表?表结构相同。我已经使用单表名称和模式作为 Dbo 完成了 POCO,只是声明了类似

的表

网络用户设置。

此外,我想问一下如何创建带有空格的名称等表格。正如我所提到的那样。如果我们要创建带空格的表名如何动态生成表名为

Sachin Sales & Service Pvt Ltd$Web 用户设置标题

在 Codefirst 方法中使用 Ado.net Entity 框架?

以前我使用 Nhibernate,所以最近转移到 Ado.net 实体框架。喜欢 Ado.net Codefirst 方法中的 Fluent 配置。有人可以用上述场景指导我如何处理它吗?任何虚拟属性都将受到欢迎。没关系 。我只是想动态生成表名基于两个场景包含完全相同的列的事实

【问题讨论】:

  • 为什么要生成这些表?你提到你已经有了这些表?
  • @LadislavMrnka 是的,我已经有了这些表,但我想使用实体框架来映射它们。实际上它们是导航表。所以我想在幕后使用实体框架来检索数据。

标签: entity-framework-4.1 ef-code-first


【解决方案1】:

...不确定这是否是您要寻找的,但这里似乎有两件事要解决:

表格命名,你有没有试过以下...
(来自你的: DbContext实现类,方法protected override void OnModelCreating(DbModelBuilder modelBuilder)

modelBuilder.Entity<JSEngineeringServicesWebUser>()
    .ToTable("JS Engineering Services$Web User");

(注意:您可能需要对此进行试验,我没有使用此类名称,也没有方便测试,请快点尝试)

另一个选项是使用[Table("JS Engineering Services$Web User")] 作为实体类的属性。 (注意:我个人更喜欢流畅的方法,因为它可以让您更好地控制(对于其他事物、键、关系),并且在“混合”两者时通常效果不佳)

...或者看看这个,类似的问题Can I change the default schema name in entity framework 4.3 code-first?

第二个问题是这些表可能是“临时表”。这有点难以实现。但是,如果您将它们放在 Db 中(只是作为临时表查看和工作),那么您可以继续像任何其他实体一样进行映射。

如果您需要动态创建和拆除 - 请在此处考虑这篇文章,其中包含类似的内容...

Cache table with Entity Framework 4

编辑:来自下面的 cmets,要更新...

如果“临时”表总是像你说的那样 -

那么您应该可以接受Cache table with Entity Framework 4 中的内容 - 创建一个模型以匹配表模型,或者甚至您可能需要创建一个这样的表(要始终存在,我不确定是否代码优先如果在开始时没有匹配项,或者在不检查的情况下使用“使用现有数据库”运行),可能会抱怨,并使用“直接”SQL 运行查询(来自上下文类,如链接中所述) - 然后列出该模型类的输出。它可能会起作用:)

【讨论】:

  • 是的,我可以做到。非常满足我的查询。但是如果在动态的基础上添加了一个新的模式呢?但“网络用户”足迹保持不变。我可以做那种静态的方式。因为JS Engeneering Services 是公司名称,不受应用程序控制。它由 navision 控制。每当添加新公司时,都会添加一个新模式,然后表名将是 Sachin Sales &amp; Pvt LTD$Web User
  • 表格的结构是否始终相同?只是名字变了?问题是 EF 不适用于临时表和类似的表。您必须解决问题,查看上面的“带有实体框架 4 的缓存表”链接。您可以执行和获取自定义 SQL,在这种情况下,这是您最好的选择。如果您可以以某种方式匹配您的“动态表”以始终匹配某些预定义模型(无论表的名称如何,我的意思是字段/属性都非常匹配类型),那么您可以执行自定义 SQL,在那里调整命名 -并在出口泵上将其放入已知模型类的“列表”中。
  • 即这里没有完美的解决方案 - 您甚至可能需要将 EF/code-first 与自定义 SQL 查询/获取混合。简而言之,我建议您在这里找到一些共同点和最低要求,将您需要的内容缩小到一分钟并尝试解决。
  • 是的,结构始终保持不变,只是架构名称发生了变化。表模型保持不变。但只是模式名称不同。
  • 那么您应该可以接受该链接中的内容(“缓存表...”) - 创建一个模型以匹配表模型,或者甚至您可能需要创建一个这样的表(以总是在那里,我不确定代码优先是否会抱怨如果在开始时没有匹配,或者使用“使用现有数据库”运行而没有检查),并使用“直接”SQL 来运行查询(来自上下文类,如链接中所述) - 然后将输出与该模型类匹配。它可能会起作用:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多