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

Adding an entity (and respective table) to EF DB-first model

我是 Entity Framework 的新手:我从数据库优先模型开始维护使用 EF 和普通老式的奇怪混合创建的应用程序 SQL。

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

我已经在图中创建了我的新实体(它由我刚刚创建的复杂实体的三个实例组成)但现在我必须制作一个增量数据库脚本来创建新的 table。我应该为 MySQL 和 SQL 服务器执行 both 但让我们从第二个开始。

所以现在我看到我有一个编译问题 "No mapping for entity Entity" 如果我使用 "Update model from database" 命令我看不到 pushing 更改到 DB 的选项,但考虑到 "from".

这个词,这听起来是正确的

好的,我尝试从右键单击菜单中单击 "Table Mapping",我找到了将实体映射到 table 的选项。我打算在 "Add table or view" 字段中输入新的 table 名称,然后......等等!我只能selectexistingtables

我知道它只是针对单个 table 所以我可以简单地 "Generate database from model" 为了获得完整的 SQL 脚本,找到我想要的 table,运行 到 DB 和 "Update model from DB" 所以 EF 会看到 table, BUT

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

你表示你有一个数据库优先的设计,但似乎是在代码优先的心态下工作。

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

那么如何为实体创建一个新的 table? 您在数据库中创建了新的 table (CREATE TABLE ...)。然后使用 "Update Model From Database" 向导从 "Add" 选项卡 select 新的 table。 EF 将自动创建相应的 EF class。如果您已经手动创建了该实体,则应将其删除,否则您最终可能会得到一些奇怪的实体命名(即 Customer1)。

数据库首先不具备支持table实体层创建的能力。数据库的改变总是一种方式,从数据库到实体模型,因此术语 "database first".

另一方面,如果您更愿意table 直接创建实体并希望从一组实体构建数据库,您应该寻求创建 "Code-First" 设计。尽管名称为 "code first",但可以从现有数据库中获取一组初始实体 classes。术语 "code first" 指的是对 db/model 结构的更改的起源。