2015-03-02 179 views
0

我正在使用EF来生成我的模型使用Model.context.tt模板described in this post.从数据库更新时保留对模型的更改?

我的模型已生成后,我想进去,并对模型进行一些修改。我能够做到这一点,但我遇到的问题是,如果我从数据库更新模型,它将覆盖我所做的任何定制。

是否有任何方法来保留我对模型所做的更改,同时仍从数据库更新?

回答

1

您需要创建与名称完全相同的部分类,并在与生成的模型相同的名称空间中,然后才能修改该类,而不必在每次重新生成T4模板时都不会丢失更改。

如果您需要对原始类进行更精细的调整编辑,则必须编辑.tt模板。虽然我会高度推荐建议查看Code First(这对于现有数据库来说更可能),因为您可以完全控制类+映射。

您可能首先复制当前生成的文件并将它们用作代码优先模型的基础。

一个常见的误解是Code First不适用于现有的数据库/数据库第一个工作,因为名称。但是这是错误的。

  • 代码首先 =编写代码和装饰型号属性或上下文 自定义映射。
  • EDMX/Designer =使用Visual Studio设计器创建一个XML(.edmx),然后由T4(.tt)模板进行处理以生成最终的类+上下文。 我个人觉得这个方法很痛苦,因为我不断地松的变化(自定义映射/关系等)
  • 实体迁移 - 这是你第一次写你的代码,等同于“代码优先”上述方法,但是您然后运行Migrations以生成和升级/降级数据库。
+0

Code先看起来对我来说这可能是一个很好的选择。从数据库优先转换到代码优先有多难?你能推荐关于这个开关的任何阅读吗? – 2015-03-03 00:19:35

+0

另外 - 我所做的更改最终需要复制到生产数据库服务器。我假设可以从我的项目更新数据库而不丢失所有数据? – 2015-03-03 00:22:12