我对Entity Framework很陌生:我从一个数据库优先模型开始,维护一个使用EF和普通旧SQL混合创建的应用程序。
我创建了自己的新数据库优先模型,我很好。今天我老板让我添加一个新实体。缺少外键简化了这种情况。
我在图中创建了我的新实体(它由我刚创建的复杂实体的三个实例组成)但现在我必须创建一个增量DB脚本来创建新表。我应该为MySQL和SQL Server做两者,但让我们从第二个开始。
所以现在我看到我有一个编译问题“没有实体Entity
的映射”,如果我使用“从数据库更新模型”命令,我看不到推送更改的选项DB,但这听起来是正确的,因为“来自”。
好的,我尝试从右键菜单中单击“表映射”,然后找到了将实体映射到表的选项。我打算在“添加表或视图”字段中键入新表名,然后......等待!我只能选择现有的表
我理解它仅适用于单个表,因此我可以简单地“从模型生成数据库”以获取完整的SQL脚本,找到我想要的表,将其运行到DB并“从DB更新模型”以便EF将见表格,但是
我想了解如何使用Entity Framework创建增量脚本。这是我的问题。
答案 0 :(得分:7)
您表明您拥有数据库优先设计,但似乎是在代码优先的心态下工作。
在数据库优先设计中,实体模型从属于底层数据存储区。对模型的更改(或至少更改模型也需要更改基础数据存储区)在数据库上首先发生。
那么如何为实体创建新表? 您在数据库中创建新表(CREATE TABLE ...)。然后使用“从数据库更新模型”向导从“添加”选项卡中选择新表。 EF将自动创建相应的EF类。如果你已经手动创建了实体,你应该删除它,否则你最终会得到一些奇怪的实体命名(即Customer1)。
数据库首先没有能力在实体层支持表创建。数据库的更改始终是从数据库到实体模型的一种方式,因此术语“数据库优先”
另一方面,如果您更愿意直接创建实体并希望从一组实体构建数据库,那么您应该寻求创建“代码优先”设计。尽管名称“代码优先”,但可以从现有数据库中获取初始的实体类集。术语“代码优先”是指对db / model结构的更改的起源。