如何从 MySQL 数据库更新实体框架模型?

ken*_*n2k 5 c# mysql entity-framework entity-framework-4

我正在尝试将 MySQL(5.5.22,连接器 6.5.4)与 Entity Framework 4 一起使用。

我正在使用模型优先方法。我成功地从我的模型中创建了一个 SQL 脚本。

现在我想修改我的数据库,然后从修改后的数据库更新我的模型(例如,我正在向表中添加一个新列,并且我希望将一个新属性添加到相应的实体中)。这种方法适用于 SQL Server 2008 R2

使用 MySQL,我无法使其工作:更新向导始终将我当前的表(已映射到实体)显示为新表,并尝试向模型添加新实体而不是更新当前实体。

在此处输入图片说明

也许有一些与旧的 #48875 错误( CREATE INDEX modifies the table name case)相关的东西:MySQL 强制我的表名小写,但这些表在 MSL 中映射为驼峰式...

是否真的可以让 MySQL 和实体框架一起工作而不会出现所有这些问题?


编辑

如果有帮助,手动重命名表以使用驼峰式大小写时

rename table mytable to mytable_bis
rename table mytable_bis to MyTable
Run Code Online (Sandbox Code Playgroud)

它不会更好地工作。


编辑 2

如果您接受从这些表创建新实体,您会注意到哪些差异?例如,如果您生成的表有主键,我会注意。

当接受从现有表在更新向导中添加新实体时,它会创建与我的现有实体一样1名为名称末尾的实体。

例如,我目前有一个Zone与名为 的表相关联的简单实体Zones。从数据库更新后,它会创建一个Zone1与表关联的新实体。Zone和之间的映射Zones被破坏,并在Zone1和之间建立新的映射Zones

ZoneZone1实体是相同的(完全相同的属性,相同的主键......等)。

然后我尝试删除所有以前的实体并将所有实体重命名XXXX1XXXX(例如,我删除了Zone实体,然后重命名Zone1Zone)。

然后我尝试第二次从数据库更新:更新向导按预期工作(没有要创建的新实体,只有要更新的实体)。

然后我尝试从模型重新生成 SQL 脚本......它工作......但后来我尝试从数据库再次更新,问题又回来了......更新向导仍在尝试添加新实体.


编辑 3

终于解决了这个问题(感谢 daryal)!问题是我的数据库架构名称没有在模型属性中指定......使用 SQL Server 时,dbo99% 的情况下,但默认情况下 MySQL 并非如此。

从数据库更新模型时,SSDL 会根据数据库的实际模式名称进行更新。

但是在从模型中再次生成数据库后,使用错误的数据库模式名称代替了好的数据库模式名称。这就是从数据库再次更新时失败的原因。

哦!

在此处输入图片说明

dar*_*yal 3

首先我要说的是,这不是一个直接的答案;但可能会指导您解决问题。首先使用 xml 编辑器打开 edmx 文件(右键单击 edmx 文件并选择打开方式)。在 edmx 文件中,有一些与对象数据库映射相关的部分,其中三个很重要。有ConceptualModels、StorageModels和映射节点。在存储节点中,检查表名是否正确:

<EntitySet Name="MasterSet" EntityType="Model1.Store.MasterSet" store:Type="Tables" Schema="dbo" />
Run Code Online (Sandbox Code Playgroud)

如果表名不正确,只需更改它们并更新映射部分中的相关数据即可。