我试图用实体框架4使用MySQL(5.5.22,连接器6.5.4)。如何从MySQL数据库更新实体框架模型?
我正在使用模型优先的方法。我成功地从我的模型中创建了一个SQL脚本。
现在我想修改我的数据库,然后从修改过的数据库更新我的模型(例如,我将一个新列添加到一个表中,并且我期待将一个新属性添加到相应的实体中) 。 这种方法适用于SQL Server 2008 R2。
的MySQL,我不能让它工作:更新向导总是显示我目前的表(已经映射到实体)为新表,并尝试新的实体添加到模型代替更新当前实体。
也许有一些相关的old #48875 bug(CREATE INDEX modifies the table name case
):MySQL的力量我的表名是小写,但这些表在MSL为驼峰映射...
它实际上是可能的让MySQL和Entity Framework在没有所有这些问题的情况下一起工作?
编辑
如果它可以帮助,手动重命名表时使用骆驼情况下
rename table mytable to mytable_bis
rename table mytable_bis to MyTable
它不工作得更好。
EDIT 2
如果接受从这些表创建新的实体,有什么 差异,你可以注意到了吗?例如,如果您生成的 表具有主键,那么请注意。
当从现有表中接受在更新向导中添加新实体时,它创建的实体与名称末尾的1
一样被调用。
例如,我目前有一个名为Zone
的简单实体与名为Zones
的表关联。在从数据库更新之后,它会创建一个名为Zone1
的与该表关联的新实体。 Zone
和Zones
之间的映射被破坏,并且在Zone1
和Zones
之间建立了新的映射。
Zone
和Zone1
实体是相同的(完全相同的属性,相同的主键等)。
我再试图删除我以前的所有实体,并更名为我所有XXXX1
实体XXXX
(例如,我删除了Zone
实体然后改名Zone1
到Zone
)。
然后我试着从数据库中第二次更新:更新向导按预期工作(不需要创建新实体,只需要更新实体)。
然后我试图重新生成模型的SQL脚本....它的工作......但后来我试图从数据库再次更新和问题回来......更新向导仍在尝试添加新的实体。
编辑3
最后解决了该问题(感谢daryal)!问题是我的数据库模式名称未在模型属性中指定......使用SQL Server时,它的值为99%,但默认情况下不是这种情况。
从数据库更新模型时,根据数据库的实际模式名称更新SSDL。
但是,在从模型中再次生成数据库之后,使用错误的数据库模式名称代替好的数据库模式名称。这就是为什么在从数据库重新更新时失败的原因。
D'oh!
如果您接受从这些表中创建新实体,您可以注意到哪些差异?例如,如果您生成的表具有主键,那么请注意。 – 2012-03-30 15:12:48
@vucetica请查看更新后的答案 – ken2k 2012-03-30 15:50:33