实体框架代码首先使用现有数据库

时间:2013-02-06 09:56:57

标签: entity-framework

我必须创建一个新项目,并且(像往常一样)使用现有的SQL Server数据库。

我以前使用EF Code First连接我的数据库,打开我的EDMX模型设计器,然后右键单击 - >添加代码生成项。 (http://weblogs.asp.net/jgalloway/archive/2011/02/24/generating-ef-code-first-model-classes-from-an-existing-database.aspx)很容易。

但现在我发现了一些名为EF Power Tools的东西,允许我做反向工程师代码优先(很酷的名字!)并得到相同的(http://msdn.microsoft.com/en-us/data/jj200620

你知道这两个选项之间的区别吗?哪一个更好?

提前致谢。

(对不起,如果之前曾问过这个问题,但我找不到。)

2 个答案:

答案 0 :(得分:2)

区别在于edmx方法不是代码优先,而是数据库优先使用DbContext API。您将始终使用数据库作为模型更改的来源。

EF Power Tools使用DbContext生成真正的代码优先模型:从那时起,您将首先更改类模型并相应地修改数据库(例如,通过EF迁移)。

两者都不“更好”。 DbContext API比ObjectContext更易于使用,但两种方法都使用前者。您可以选择是先工作数据库还是先编码。这是个人偏好的问题,可能取决于谁维护数据库结构。首先使用数据库,可以更容易地响应其他人对数据库结构所施加的更改。

答案 1 :(得分:1)

就数据库的工作流程而言,首先添加@ Gert-Arnold所说的内容:

  

首先使用数据库,可以更容易地响应其他人对数据库结构所施加的更改。

如果其他人正在管理数据库更改,我发现使用EF Designer会容易得多。您将获得更新的数据库,然后右键单击EF Designer并从数据库更新模型。您可以使用源代码管理轻松查看已更改的内容。

此外,如果您只需要数据库中的一个表子集,则逆向工程会导致很多工作不得不返回并从上下文中删除类和属性。

我发现通过代码优先对现有数据库进行重新逆向工程,试图弄清楚改变了什么以及我需要更新使用上下文的代码,这太痛苦了。