使用 Entity Framework Code First 更新数据库架构

发布于 2024-11-01 17:18:23 字数 309 浏览 1 评论 0原文

Entity Framework Code First 是一个用于开发新项目的出色框架。但是扩展现有数据库怎么样?

例如,如果我只想向现有数据实体添加附加属性怎么办?是否有任何“代码优先”的方法来执行此操作,或者我必须使用 SQL Server Management Studio 或类似工具手动添加数据库列?

到目前为止我所发现的是如何在架构更改时从头开始重新生成整个数据库,但我不想丢失我的数据。

如果我没记错的话,Ruby on Rails 有一个工具可以生成反映新数据库更改的 SQL 脚本。在 EF Code First 中也有办法做到这一点吗?

Entity Framework Code First is a great framework for developing new projects. But what about extending an existing database?

For instance what if I simply want to add an additional property to an existing data entity? Is there any "code first" way to do this or will I have to add a database column by hand using SQL Server Management Studio or a similar tool?

All I have found so far is how to regenerate the entire database from scratch when the schema changes, but I don't want to lose my data.

If I'm not mistaken, there is a tool for Ruby on Rails that can generate an SQL script reflecting the new database changes. Is there any way to do this in EF Code First as well?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

盗梦空间 2024-11-08 17:18:23

我目前正在使用 EntityFramework.Migrations 库,它解决了发展数据库模式的问题。它可以创建迁移类,生成 SQL 脚本来更新您的架构。

目前它仍处于测试阶段,但我发现它很有用。不幸的是,您仍然应该生成数据迁移脚本。

您可以在此处找到更多信息。

I'm currently using EntityFramework.Migrations library which addresses the problem of evolving the DB schema. It works creating migration classes which generate SQL scripts to update your schema.

It is still in beta at this time but I found it useful. Unfortunatly you should still generate data migration scripts.

You can find more information here.

白芷 2024-11-08 17:18:23

不幸的是没有。目前还没有办法在 EF 代码优先中增量构建数据库。 ADO.NET团队描述了他们正在研究的一些方法,但这些工具尚未发布。唯一的方法是使用数据库或模型优先方法。这意味着您可以直接在数据库中对更改进行建模并继续编码,或者您可以使用 EDMX 模型和 数据库生成强力包,用于增量构建您的数据库。您仍然可以通过 EF 4.1 中添加的新 T4 模板从 EDMX 生成 DbContext,但您将失去定义实体类的方式(它们将由模板创建)。

Unfortunatelly no. There are currently no ways to build database incrementally in EF code-first. ADO.NET team described some approach they are working on but these tools haven't been published yet. The only way is using database or model first approach. It means you can model your changes in database directly and continue with your coding or you can use EDMX model and Database Generation Power Pack to build your DB incrementally. You can still generate DbContext from EDMX by a new T4 template added in EF 4.1 but you will lose your way to defining entity classes (they will be created by a template).

前事休说 2024-11-08 17:18:23

我目前正在研究类似的问题。

我使用 EF 模型第一种方法。我使用一个数据库项目,该项目由 EF 生成的 sql 提供。

基本上我有一个正常的数据库项目,但是表sql是EF模型生成的sql。

仅供参考,数据库项目能够在现有数据库上生成更改脚本,而不会丢失所有数据。您可以设置一个数据库项目,以便在执行的更改对数据有害时发出警告,并且在这种情况下不要运行。

我还没有完成完善我的解决方案(更改 ef 用于生成 sql 的 SsdlToSql10.tt。使其对数据库项目更加友好!)。

I am working on a similar problem at the moment.

I use EF Model first approach. I use a database project, which is fed by the sql EF generates.

Basically I have a database project as normal, but the table sql is the sql generated by the EF model.

FYI Database projects are capable of producting change scripts on existing databases without loosing all your data. You can set a db project to warn you if the alteration being performed is harmful to data and not to run in such cases.

I am not finished refining my solution (changing the SsdlToSql10.tt which ef uses to produce sql. Making it more friendly to database projects!).

感悟人生的甜 2024-11-08 17:18:23

Visual Studio 有一个工具架构比较。代码修改后可以生成数据库,然后使用Schema Compare增量修改您的数据库项目或另一个数据库

Visual Studio have a tool Schema Comparison. After code modifying you can generate database, then use Schema Compare to incremental modify your database project or another database

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文