忽略实体框架中的特定列?

时间:2013-05-10 06:16:34

标签: c# entity-framework

我从Entity Framework版本4.1.10331.0中的数据库中自动生成模型。

我想在不使用Fluent Api的情况下忽略实体中的列,而不将ObjectContext更改为DbContext(当然不会从SQL表中删除列)并且不标记属性在模型中使用属性NotMapped生成,因为每当我在模型中更新我的上下文时,该列将重新出现。

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

感谢和最好的问候本

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

如果我记得很清楚,在EF3,EF4甚至EF5中都没有办法保留它们。如果你只是“更新”模型,他们就有机会幸存,但重生永远不会保留任何东西。

您可以尝试创建将在重新生成后运行的脚本或脚本集,这些脚本可以搜索并将修复应用于生成的模型。但那就是“解决方法”(字面意思是工作和周围),而不是真正的解决方案。

另一件事,更多的工作,是定义将处理投影的视图或StoredProcedures(或自定义表映射),但它们有时也可能在重新生成后变得毛茸茸(特别是自定义表格maping将永远消失)。

您实际上可以忽略不需要的列并准备一组将执行投影的轻型LINQ包装器/访问器,并将它们放在一些静态MyTables类中,并使用该类而不是RawTable。这将起作用并且可以使用,但不再是漂亮的。

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