实体框架理解[重复]
Posted
技术标签:
【中文标题】实体框架理解[重复]【英文标题】:Entity Framework understanding [duplicate] 【发布时间】:2014-09-18 01:02:10 【问题描述】:大约一年前,我开始使用 Entity Framework,使用 Database-First 方法。在网上阅读和研究时,我遇到了一些令我困惑的术语。我想知道是否有人可以帮助解决我的一些问题:
1) 使用 Database-First 方法,我构建我的 SQL 表并从数据库创建我的 edmx 文件。从那里,我通过创建数据上下文开始编码,然后访问实体。我最近阅读并看到我可以右键单击 .edmx 文件并“添加代码生成项”,然后添加“Ado.Net EntityObject Generator/EF 5.x DBContext Generator/EF4.x POCO实体等。这些不同的代码生成器的目的是什么?我应该实现它们吗?我应该什么时候实现它们?
2) 我正在阅读很多关于“对象模型和域模型”的内容。 EF 是对象模型还是领域模型 ORM?
提前感谢您提供任何信息。
【问题讨论】:
除此之外,这个问题对于 *** 来说太宽泛了。首先提出一个问题,并确保它是关于一个具体的编程问题。 【参考方案1】:添加代码生成项
默认情况下,类是在 EntityModelCodeGenerator 的帮助下生成的。借助自定义代码生成,您可以对其进行自定义。为什么要这样做?
我可以给出的一个例子是 - 如果你想通过 EDMX 生成的每个实体实现 INotifyPropertyChanged 接口。默认情况下 EntityModelCodeGenerator 不会为您执行此操作。因此,您需要自定义它。
(请注意,这只是我的理论知识,但上面的例子是相当实际的情况)
领域模型与对象模型。
不管有什么区别,可以肯定的是域模型也是对象模型,因为在这两种情况下,您都在定义类和关联。这就是我定义领域模型和对象模型的方式。
唯一的主要区别可能是您定义对象的方式;在域模型的情况下,您完全是从业务角度思考并定义您的对象。
据我所知,EF 数据库可能首先是对象模型,因为当我进行数据库设计时,我很少考虑业务,而是考虑要存储什么。
如果我在做 POCO,那么我可能会从领域模型的角度来思考。
如果是 EF - Code First,我已经开始从业务的角度思考并建立我的关联,然后再考虑如何存储对象。
所以这只是一种感知,最终是域模型还是对象模型,ORM 即 EF 将为您提供将此对象持久保存到数据库中。
希望对你有帮助。
【讨论】:
非常感谢。这真的很有帮助。我现在对域模型与对象模型有了更好的理解。很好的解释。【参考方案2】:您通常不需要使用“代码生成项”选项。它用于执行正在使用的 EF 版本的更改,您可以使用它来执行一些自定义代码生成。一般来说,您应该可以不理会这个选项。
EF 是真正一个 ORM(Obect-Relational Mapper)。它获取对象并将它们映射到关系(表)。它可以用作对象模型或域模型(或两者兼有),具体取决于您如何定义这些术语。
【讨论】:
以上是关于实体框架理解[重复]的主要内容,如果未能解决你的问题,请参考以下文章