【发布时间】:2012-02-06 07:01:57
【问题描述】:
我刚开始学习 EF 4.0 CodeFirst,我想听听专家的意见 EF CodeFirst 的优缺点是什么?
【问题讨论】:
-
@WouterdeKort 谢谢这就是我正在寻找的。span>
标签: .net architecture orm entity-framework-4 entity-framework-4.1
我刚开始学习 EF 4.0 CodeFirst,我想听听专家的意见 EF CodeFirst 的优缺点是什么?
【问题讨论】:
标签: .net architecture orm entity-framework-4 entity-framework-4.1
我一直倡导以数据为中心的方法,我相信这就是优点和缺点的来源。
如果您的优势在于数据库设计和开发,您可能会发现从数据库模式进行开发更容易、更直观。但是,如果您在对象和类方面思考得更好,或者如果您直接从类模型中工作,您可能最好从 CodeFirst 的角度开始。
就个人而言,我发现自己必须从 CodeFirst 的角度进行更多更改,而不是从生成我的类的“DataFirst”。
【讨论】:
主要区别在于 Code First 要求您在代码中定义所有内容,而 Model/Database 首先要求您在 XML/Designer 中定义所有内容,并且只在代码中定义最少的内容。
例如,如果您需要两种方式的导航属性,那么您必须在每个实体中为此编写代码。这是在使用其他方法时自动为您生成的。
我喜欢代码首先给你的力量,但大多数时候我只是懒得做所有这些。
在大多数情况下,您会得到完全相同的东西。这就是你如何建模它。
另一个缺点是(当前)在 Code first 中,当您进行更改时,它会删除表并重新创建它。丢失所有数据(您当然可以为数据库播种,但不会取回您可能手动输入的数据)。这将在 Code First Migrations 产品发布时解决。
【讨论】:
我认为每种方法更适合不同的场景:
推荐使用数据库优先或模型优先的场景:
推荐代码优先的场景:
如果您想要一个足够动态以包含不断变化的结构的持久数据库,那么请考虑您的模型/模式重复使用的通用类/表,以用于变化/依赖于上下文的目的。
更新:
我现在建议在其他情况下使用 Code-First:
【讨论】: