2017-07-07 163 views
0

我有一个使用实体框架数据库优先风格开发的项目。我对各种Model文件进​​行了一些更改,现在每次在我的EDMX文件上执行“从数据库更新模型”时,这些更改都会被清除。我看到有一个Refresh选项卡,它列出了我的模型文件,但是没有办法告诉VS不刷新这些文件。我应该在这里做什么?谢谢。如何在执行“从数据库更新模型”时更新模型文件?

+0

请勿将更改直接写入.edmx类。这些类是由ef生成的。生成的类定义为部分,以便您可以在单独的物理文件中定义自己的部分类以扩展生成的功能 – Fran

回答

1

请勿将更改直接写入.edmx类。这些类是由ef生成的。生成的类定义为partial,以便您可以在单独的物理文件中定义自己的部分类以扩展生成的功能。

这里有一个很好的例子

https://dotnetcodr.com/2015/02/18/extending-class-definitions-with-partial-classes-in-c-net/

它甚至在产生的.cs顶部声明文件

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated from a template. 
// 
// Manual changes to this file may cause unexpected behavior in your application. 
// Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 
+0

谢谢。该链接很有帮助。 –

-2

我觉得你的问题的最佳答案是: 开始学习实体框架Code-First

+0

他可能正在研究一个现有的代码库,它不允许这样做。但我绝对同意这种看法。 – Fran

+0

如果您直接对数据库进行更改(又名现有数据库中的Code-First),Code-First不会解决此问题。 –

+0

我希望我能。首先给我一个工作数据库。当我完成这个项目的工作时,我想我会在Code First做一个有趣的开始。它似乎更加灵活。 –

0

取决于你改变了什么。如果您对edmx模型进行了更改,则每次重新生成模型时都会覆盖它们。

如果您对所生成的poco-class进行了更改, Poco's是作为部分类生成的。只需创建一个子文件夹,并使用相同的类签名将您的poco扩展到单独的文件中。

同样适用于模型上下文类(yourModelName.Context.cs)。更改也应该在一个单独的文件中完成。

也许你应该尝试'Code First from database'。这会生成一个Fluent模型,更容易更改您的特定需求。尽管没有模型的图形表示。

0

就像你说的...它的DatabaseFirst ...所以你的模型文件将从数据库更新(不是任何其他地方...不是你),你不应该这样做......因为每一个变化都将失去当你再次从数据库更新你的模型! ...如果因为某些原因(例如添加列或(...))而改变模型,则必须从数据库中执行此操作,而不是在这里执行操作!...但如果将其更改为另一个原因,如添加验证属性或..你必须使用部分类!不要直接写在你的模型文件中。