2

我们想首先使用模型为我们的应用程序生成干净的 EF 模型,但我们不想让模型生成新的数据库模式,然后我们想手动在实体中执行表映射到现有的数据库表或表。有这种机制吗?

4

3 回答 3

1

当然是。

这称为实体框架代码优先,这是一个很好的教程,可以帮助您入门

这个想法是您创建一些独立于您的 Repository/Database 类的 POCO 类。在这个 Repository/Database 类中,您定义了 POCO 之间的所有关系。幸运的是,Entity Framework 有许多可以利用的约定,这意味着您可能不需要定义每个关系和规则。

例如。如果您的类被调用User,那么它将假定(默认情况下,除非您覆盖它)调用了数据库表Users,并且 POCO 中的主键标识字段将UserId与数据库表中的相同。

于 2011-03-21T04:09:04.787 回答
0

不确定我是否理解这个问题,但是当您使用向导创建新的实体数据模型时,第一步允许您“从数据库生成”,只需将其指向您现有的数据库。然后,您可以删除不需要的表和/或手动修改表映射。还可以选择首先选择要在模型中表示的表格。

于 2011-02-18T18:37:29.230 回答
0

我还首先使用 EF 模型和 EF 4.0 寻找此选项。我还想从一个小的干净模型开始,因为我们有一个巨大的企业级应用程序,我们无法将所有内容导入到一个 edmx 中,因为由于我们数据库的规模,它甚至不可见。

因此,我们想首先考虑将模型作为构建更小、更清晰模型的选项,然后将它们映射到数据库中现有的表。

这是我们学到的。

模型首先生成将进入“现有数据库”的数据库模式。最初它有点误导,因为人们认为它创建了一个新的数据库。它实际上并没有创建数据库本身。db 必须存在,然后模型首先生成将进入 db 的 t-sql 脚本。

它会在您的项目中的一个新的 .sql 文件中生成这些脚本,然后您可以查看该文件或将其发送给 dba(如果有的话)。

假设您的表不存在,它将生成这些脚本作为表的 CREATES。

因此,例如,如果您在模型中创建了一个“客户”实体,它将生成一个包含 CREATE TABLE T-sql 的脚本 (*.sql) 文件来为您的客户实体创建客户表,然后您可以在该表上运行现有的 sql 数据库。

所以这就是它的设计目的,基本上为新模型生成干净的表。

这是否意味着如果您的表已经存在,您根本无法使用它?不,你可以使用它。您只是不会运行它生成的创建脚本。我不相信它真的是为此而设计的,但我们对此进行了测试,它确实有效。

您可能会遇到模型优先的其他问题,我们发现的一个限制是,因为模型优先旨在生成新的数据库模式,您无法映射到现有的存储过程。这对我们来说是个问题,因此我们首先取消了模型作为我们架构的一个选项。

我们现在正在审查代码优先和数据库优先作为企业级系统的选项,现在我们现在倾向于代码优先。代码优先允许您创建可以使用的小型、可管理的上下文,这在大型企业级应用程序中似乎非常有益。

于 2013-02-15T16:57:38.900 回答