2

我从实体框架版本 4.1.10331.0 中的数据库自动生成模型。

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

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

谢谢和最好的问候本

4

2 回答 2

4

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

  1. 创建一个包含您需要的列的视图,然后在 EF 中生成它。
  2. 创建另一个从您的实体派生的类,该类将显示您想要的数据。此类将是您的“应用程序实体”(如您所知,应在此处考虑其他管理)
于 2013-05-10T06:23:59.380 回答
0

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

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

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

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

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

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

于 2013-05-10T06:26:10.523 回答