将实体(和相应的表)添加到EF DB优先模型

时间:2015-01-30 16:03:38

标签: c# sql-server ef-database-first entity-framework-6.1 ef-model-first

我对Entity Framework很陌生:我从一个数据库优先模型开始,维护一个使用EF和普通旧SQL混合创建的应用程序。

我创建了自己的新数据库优先模型,我很好。今天我老板让我添加一个新实体。缺少外键简化了这种情况。

我在图中创建了我的新实体(它由我刚创建的复杂实体的三个实例组成)但现在我必须创建一个增量DB脚本来创建新表。我应该为MySQL和SQL Server做两者,但让我们从第二个开始。

所以现在我看到我有一个编译问题“没有实体Entity的映射”,如果我使用“从数据库更新模型”命令,我看不到推送更改的选项DB,但这听起来是正确的,因为“来自”。

好的,我尝试从右键菜单中单击“表映射”,然后找到了将实体映射到表的选项。我打算在“添加表或视图”字段中键入新表名,然后......等待!我只能选择现有的

我理解它仅适用于单个表,因此我可以简单地“从模型生成数据库”以获取完整的SQL脚本,找到我想要的表,将其运行到DB并“从DB更新模型”以便EF将见表格,但是

我想了解如何使用Entity Framework创建增量脚本。这是我的问题。

1 个答案:

答案 0 :(得分:7)

您表明您拥有数据库优先设计,但似乎是在代码优先的心态下工作。

在数据库优先设计中,实体模型从属于底层数据存储区。对模型的更改(或至少更改模型也需要更改基础数据存储区)在数据库上首先发生。

那么如何为实体创建新表? 您在数据库中创建新表(CREATE TABLE ...)。然后使用“从数据库更新模型”向导从“添加”选项卡中选择新表。 EF将自动创建相应的EF类。如果你已经手动创建了实体,你应该删除它,否则你最终会得到一些奇怪的实体命名(即Customer1)。

数据库首先没有能力在实体层支持表创建。数据库的更改始终是从数据库到实体模型的一种方式,因此术语“数据库优先”

另一方面,如果您更愿意直接创建实体并希望从一组实体构建数据库,那么您应该寻求创建“代码优先”设计。尽管名称“代码优先”,但可以从现有数据库中获取初始的实体类集。术语“代码优先”是指对db / model结构的更改的起源。