实体框架和代码优先开发

Posted

技术标签:

【中文标题】实体框架和代码优先开发【英文标题】:Entity Framework and Code First Development 【发布时间】:2011-11-29 11:20:51 【问题描述】:

Microsoft 发布 Entity Framework 4.0,开发人员可以在其中进行代码优先开发。这很好,感谢 Microsoft。

我对代码优先开发有一个困惑。我曾在 ASP.NET 3.5 SP1 和 Visual Studio 2008 SP1 中研究过实体框架。在那里我们创建了一个数据库模式,然后我们创建了实体数据模型。这意味着我们正在从数据库创建我们的类模型。我认为这就是所谓的数据优先开发。

但是当我们在 Entity Framework 3.5 SP1 中创建实体数据模型时,有两个选项。首先是从现有数据库生成,另一个是创建一个空白模型。假设我创建了一个空白模型,然后将其映射到数据库。所以我们首先开发类模型而不考虑数据库模式,然后将其映射到数据库。我的困惑是,它是否称为代码优先开发?那为什么社区的人和书都说“在 Entity Framework 3.5 SP1 中不可能实现代码优先开发”?

为了解决我的困惑,我需要你的帮助。所以请在这个帖子上回复。

谢谢。

【问题讨论】:

虽然不是完整的答案,但请看这里:***.com/questions/5446316/… 【参考方案1】:

Code First 自 Entity Framework 4.x 起可用。 所以你不能在 3.5 SP1 中从你的代码模型生成数据库。

基本上有3种:

    数据库优先(数据库已经存在,您可以使用向导从该数据库创建 edmx) 模型优先(您使用设计器创建数据库模型,实体框架从中生成数据库) 代码优先(您创建自己的代码,实体框架会从中创建一个数据库)

更多信息:Code-First Development with Entity Framework 4

【讨论】:

【参考方案2】:

实际上这称为“模型优先”开发。尽管 Visual Studio 中的默认设计器直接将您的模型转换为代码,但实际上它只是您在设计器中看到的“概念模型”。在您定义属性和关系的地方,设计器使用“代码生成策略”为您创建 .NET 类。

“新的代码优先”方法让您可以直接创建 .NET 类,而不是弄清楚“概念模型”的样子。

【讨论】:

【参考方案3】:

当您创建一个空白模型然后尝试对该域进行建模时,称为Model First。您可以在设计器中直观地设计实体模型。然后它会为您生成关系。

在代码优先中,您没有视觉设计师。你必须自己编码这些关系。所以叫Code First. 看看这个了解更多详情

Code-first vs Model/Database-first

【讨论】:

以上是关于实体框架和代码优先开发的主要内容,如果未能解决你的问题,请参考以下文章

代码优先实体框架或 NHibernate

实体框架代码优先 - 不可为空类型的默认值

实体框架核心关系问题(代码优先) - 重复列

无法在 .NET 中的实体框架代码优先方法中迁移 AspNetUser 实体

实体框架、代码优先和全文搜索

尝试在没有太多运气的情况下部署实体框架代码优先应用程序?最佳部署策略?