实体框架代码首先是开发新项目的一个很好的框架。但是扩展现有数据库呢?
例如,如果我只想向现有数据实体添加其他属性,该怎么办?有没有“代码优先”的方法来实现这一点,还是我必须使用SQL Server Management Studio或类似工具手动添加数据库列?
到目前为止,我发现的是如何在架构更改时从头开始重新生成整个数据库,但我不想丢失数据。
如果我没弄错的话,Ruby on Rails有一个工具可以生成反映新数据库更改的SQL脚本。有没有办法在EF Code First中执行此操作?
答案 0 :(得分:9)
我目前正在使用EntityFramework.Migrations库来解决发展数据库架构的问题。它可以创建迁移类,生成用于更新架构的SQL脚本。
目前它还处于测试阶段,但我发现它很有用。不幸的是,你仍然应该生成数据迁移脚本。
您可以找到更多信息here。
答案 1 :(得分:7)
不幸的是没有。目前还没有办法在EF代码中以增量方式构建数据库。 ADO.NET team described some approach他们正在努力,但这些工具尚未发布。唯一的方法是使用数据库或模型第一种方法。这意味着您可以直接对数据库中的更改建模并继续编码,也可以使用EDMX模型和Database Generation Power Pack逐步构建数据库。您仍然可以通过EF 4.1中添加的新T4模板从EDMX生成DbContext
,但您将失去定义实体类的方法(它们将由模板创建)。
答案 2 :(得分:3)
我正在研究类似的问题。
我使用EF模型第一种方法。我使用的是一个数据库项目,它由sql EF生成。
基本上我有一个正常的数据库项目,但表sql是由EF模型生成的sql。
FYI数据库项目能够在现有数据库上生成更改脚本,而不会丢失所有数据。如果正在执行的更改对数据有害并且在这种情况下不运行,则可以设置db项目以警告您。
我还没有完善我的解决方案(更改用于生成sql的SsdlToSql10.tt。使它对数据库项目更友好!)。
答案 3 :(得分:1)
Visual Studio有一个工具架构比较。修改代码后,您可以生成数据库,然后使用Schema Compare对数据库项目或其他数据库进行增量修改