【问题标题】:Ignore a specific column in Entity Framework? [duplicate]忽略实体框架中的特定列? [复制]
【发布时间】:2013-05-10 14:42:04
【问题描述】:

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

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

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

谢谢和最好的问候本

【问题讨论】:

  • 如果你想忽略,忽略它。这和编程有什么关系?您的意思是不从数据库中获取该列的数据还是什么?
  • 是的,我的意思是不要为该列添加数据
  • 哎呀。我没有注意到那个评论。你的意思是,只是不获取数据?或者您的意思是根本不在生成的类定义中包含该列(因此“myShoeSize”在代码中的任何地方都从未见过,它是仅存在于数据库中的“秘密列”?)。

标签: c# entity-framework


【解决方案1】:

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

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

【讨论】:

  • 前 1 点听起来很棒。谢谢 :)
  • @Adrian10BEN 如果它是正确的,别忘了检查它作为答案:)
【解决方案2】:

EF 数据库优先在许多地方都没有得到充分利用。与您的问题类似,如果您从 DB 生成模型并重命名 CodeSpace 中的列(因此列 users.col_chr_UsrName 只是 User.Name),在重新生成模型时也会丢失它。

如果我没记错的话,在 EF3、EF4 甚至 EF5 中都没有办法保存它们。如果你只是“更新”模型,它们就有机会存活下来,但重新生成永远不会保留任何东西。

您可以尝试创建一个脚本或一组脚本,以便在重新生成后运行,这些脚本可能会寻找并应用修复到生成的模型。但这就是“解决方法”(字面意思是,工作和周围),而不是真正的解决方案。

另一件需要更多工作的事情是定义将处理投影的 Views 或 StoredProcedures(或自定义表映射),但它们有时也可能在重新生成后变得毛茸茸(尤其是总是会消失的自定义表映射)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多