我们首先使用模型为我们的应用程序生成干净的EF模型,但是我们不想让模型生成新的数据库模式,而是要在实体内手动执行表映射到现有数据库表或表。有这种机制吗?
答案 0 :(得分:1)
当然可以。
这称为实体框架代码优先,这是good tutorial to help getting you started。
这个想法是你创建了一些与你的Repository / Database类分开的POCO类。在此Repository / Database类中,您可以定义POCO之间的所有关系。幸运的是,Entity Framework有许多约定可供您利用,这意味着您可能不需要定义每个关系和规则。
EG。如果您的类被称为User
,那么它将假定(默认情况下,除非您覆盖此项)数据库表被称为Users
并且POCO中的主键标识字段将为{{1}和数据库表中的相同。
答案 1 :(得分:0)
不确定我是否理解这个问题,但是当您使用向导创建新的Entity数据模型时,第一步允许您“从数据库生成”,只需将其指向现有数据库即可。然后,您可以删除不需要的表和/或手动修改表映射。您还可以选择首先在模型中选择要表示的表格。
答案 2 :(得分:0)
我还首先使用EF模型在EF 4.0中查找此选项。我还想从一个小型的清洁模型开始,因为我们有一个庞大的企业级应用程序,我们无法将所有内容导入到一个edmx中,因为由于我们的数据库规模,它甚至都无法查看。
因此,我们首先考虑模型作为构建更小,更清晰模型的选项,然后将它们映射到我们的数据库中的现有表。
这是我们学到的。
模型首先生成将进入“现有数据库”的数据库模式。最初有点误导,因为人们认为它会创建一个新的数据库。它实际上并不创建数据库本身。 db必须存在,然后模型首先生成将进入db的t-sql脚本。
它在项目中的新.sql文件中生成这些脚本,然后您可以查看或发送给dba(如果有的话)。
假设您的表不存在,它将生成这些脚本作为表的CREATES。
因此,作为示例,如果您在模型中创建了“Customer”实体,它将生成一个包含CREATE TABLE T-sql的脚本(* .sql)文件,以便为您的客户实体创建客户表。然后在现有的sql数据库上运行。
所以这就是它的目的,基本上为新模型生成干净的表。
如果您的表已经存在,这是否意味着您根本无法使用它?不,你可以使用它。您不会运行它生成的创建脚本。我不相信它真的是为此而设计的,但我们对此进行了测试并确实有效。
如果您首先遇到模型的其他问题,并且我们发现了一个限制,那就是因为模型首先用于生成新的数据库模式,所以您无法映射到现有的存储过程。这对我们来说是一个问题,因此我们首先将模型作为我们架构的一个选项进行淘汰。
我们现在首先审查代码,然后首先查看db作为企业级系统的选项,现在我们首先考虑代码。代码优先允许您创建可以使用的小型,可管理的上下文,这在大型企业级应用程序中看起来非常有用。