2013-05-10 53 views
2

我在Entity Framework 4.1.10331.0版本的数据库中有自动生成的模型。忽略实体框架中的特定列?

我想忽略从实体的柱不使用流畅API和不改变ObjectContextDbContext(当然,而不删除从SQL表中的列)和无标记与该属性的模型生成的属性NotMapped,因为无论何时我在模型中更新我的上下文,该列将重新出现。

有人可以帮助我在这种情况下?

感谢和问候奔

+0

如果您想忽略,请忽略它。这与编程有什么关系?你的意思是没有从数据库中获取该列的数据或者什么? – 2013-05-10 06:28:39

+0

是的美特我的意思不是要处理该列的数据 – 2013-05-10 06:30:51

+0

oops。我没有注意到那个评论。你的意思是,只是不提取数据?或者你的意思是根本不在生成的类定义中包含该列(因此“myShoeSize”在代码中从未见过,并且它只是存在于数据库中的“秘密列”)。 – quetzalcoatl 2013-05-10 06:44:16

回答

4

我没有看到这个问题每次生成模型时更新EF,但我可以提出2个解决方案:

  1. 创建包含列的视图你需要,然后在EF中生成它。
  2. 创建另一个从您的实体派生的类,将显示您想要的数据。此类将成为您的“应用程序实体”(正如您所知,应在此处考虑额外管理)
+0

第1点听起来不错。谢谢:) – 2013-05-10 06:33:09

+0

很高兴帮助! – noobob 2013-05-10 06:33:38

+0

@ Adrian10BEN不要忘记检查它作为答案,如果它是正确的:) – noobob 2013-05-10 07:10:55

0

EF数据库优先级在很多地方都非常不足。与您的问题类似,如果您从DB生成模型并重命名CodeSpace中的列(因此列users.col_chr_UsrName只是User.Name),那么在重新生成模型时也会丢失它。

如果我记得不错,在EF3,EF4甚至在EF5中都没有办法保存它们。如果你只是“更新”模型,他们有幸存活下来,但再生不会保留任何东西。

您可以尝试创建一个将在重新生成后运行的脚本或一组脚本,并且这些脚本可能会寻求修补程序并将其应用于生成的模型。但那就是,“解决方法”(字面上,工作和周围),而不是一个真正的解决方案。另一件事情,更多的工作是定义将处理投影的视图或StoredProcedures(或自定义表映射),但它们有时也可能在重新生成后变得毛茸茸(特别是自定义表格映射将永远消失)。

实际上,您可以忽略不需要的列,并准备一组执行投影的轻型LINQ包装器/存取器,并将它们放入一些静态MyTables类中,并使用该类代替RawTable。这将工作,并可能可用,但不再漂亮。

恕我直言,最好的方法是使用后来修复模型的脚本,或者使用不需要的列,或者不使用设计器内的自动生成。试着找到另一个更智能的发电机。