【问题标题】:Adding an entity (and respective table) to EF DB-first model将实体(和相应的表)添加到 EF DB-first 模型
【发布时间】:2015-01-30 16:03:37
【问题描述】:

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

我创建了自己的全新 DB-first 模型,我对此很好。今天我的老板让我添加一个新实体。缺少外键简化了场景。

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

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

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

我知道这只是针对单个表,所以我可以简单地“从模型生成数据库”以获得完整的 SQL 脚本,找到我想要的表,将其运行到数据库和“从数据库更新模型”,这样 EF 将见表,但是

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

【问题讨论】:

  • 来自msdn.microsoft.com/en-us/data/jj205424:“如果您需要将更改发布到已经部署的数据库,您将需要编辑脚本或使用架构比较工具来计算迁移脚本。”

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


【解决方案1】:

您表示您的设计是数据库优先,但似乎是在以代码优先的心态工作。

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

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

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

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

【讨论】:

  • 解释清晰流畅。我实际上得出的结论是,使用 Generate SQL 命令是更新模型的好方法,然后我需要使用老式技术手动推送更改
猜你喜欢
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2023-03-05
  • 2016-08-08
  • 2016-05-30
  • 1970-01-01
相关资源
最近更新 更多