如何映射与不同势架构名称动态表

问题描述:

我有名字,如如何映射与不同势架构名称动态表

JS工程服务$ Web用户设置页眉 萨钦销售&服务私人有限公司$ Web用户设置页眉

我如何将这些表与Ado.net实体框架映射POCO代码的第一种方法?表结构是相同的。我已经完成了带有单表名称和架构的POCO,因为Dbo只是宣布类似

网页用户设置。

此外,我想问一下,如何使用空格创建像名称一样的表。就像我刚才提到的那样。如果我们要与空间创建表的名字怎么做动态生成一个表名作为

萨钦销售&服务私人有限公司$ Web用户使用Ado.net实体框架设置页眉

Codefirst方法?

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

+0

为什么你想要生成这些表?你提到你已经有这些表? – 2012-04-05 07:31:07

+0

@LadislavMrnka是的,我已经有了这些表,但我想用Entity Framework来映射它们。其实他们是navision桌子。所以我想在幕后使用实体框架来检索数据。 – Joy 2012-04-05 08:42:31

...不知道这是你在找什么,但有两件事情要解决这里似乎:

表命名,你尝试过以下...
(从: DbContext实现类,方法protected override void OnModelCreating(DbModelBuilder modelBuilder)

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

(注:你可能需要用这个实验,我的天堂”工作w/s uch名称,并没有它方便测试,试试快)

另一种选择是使用[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

编辑:从下面的评论,更新...

如果“临时”表始终是相同的像你说的是 -

那么你应该确定用什么在Cache table with Entity Framework 4 - 创建一个模型来匹配表模型,甚至你可能需要创建像这样的一个表(总是在那里,我不确定如果代码优先可能会抱怨,如果没有在开始匹配,或与'使用现有的数据库'W/O检查运行),并使用'直'SQL运行查询(来自上下文类,如链接中所述) - 然后列出输出到该模型类。它可能只是工作:)

+0

是的,我可以那样做。它满足我的查询很多。但是如果在动态基础上添加新的模式呢?但“网络用户”的足迹仍然相同。我可以做到这一点静态的方式。因为'JS Engeneering Services'是公司名称,不受应用程序控制。它由navision控制。每当添加一个新公司时,就会添加一个新的模式,并且表名会是'Sachin Sales&Pvt LTD $ Web User' – Joy 2012-04-07 05:01:57

+0

这些表的结构总是一样的?只是名称改变?问题是EF对于临时表和类似表现并不好。你必须要解决,看看上面的'使用Entity Framework 4的缓存表'链接。您可以执行并获取自定义SQL,这是您最好的选择。如果你可以以某种方式匹配你的'动态表',以便总是匹配某个预定义的模型(无论表名是什么,我的意思是字段/属性的匹配类型非常多),那么你可以执行自定义SQL,在那里调整命名 - 并在出口泵进入已知模型类的“列表”中。 – NSGaga 2012-04-07 15:02:18

+0

即没有完美的解决方案 - 您甚至可能需要先将EF /代码优先与自定义SQL查询/提取混合。总之,我建议你在这里找到一些共同点,并且最低限度的要求,把你需要的分数缩减到一分钟,然后尝试解决。 – NSGaga 2012-04-07 15:03:50