Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从MySQL数据库更新实体框架模型?_C#_Mysql_Entity Framework_Entity Framework 4 - Fatal编程技术网

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

C# 如何从MySQL数据库更新实体框架模型?,c#,mysql,entity-framework,entity-framework-4,C#,Mysql,Entity Framework,Entity Framework 4,我正在尝试将MySQL(5.5.22,Connector 6.5.4)与EntityFramework4结合使用 我使用模型优先的方法。我成功地从模型中创建了一个SQL脚本 现在我想修改我的数据库,然后从修改后的数据库更新我的模型(例如,我正在向表中添加一个新列,我希望向相应的实体中添加一个新属性)这种方法在SQL Server 2008 R2上运行良好 使用MySQL,我无法使其工作:更新向导始终将我的当前表(已映射到实体)显示为新表,并尝试向模型添加新实体,而不是更新当前实体 可能与(CR

我正在尝试将MySQL(5.5.22,Connector 6.5.4)与EntityFramework4结合使用

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

现在我想修改我的数据库,然后从修改后的数据库更新我的模型(例如,我正在向表中添加一个新列,我希望向相应的实体中添加一个新属性)这种方法在SQL Server 2008 R2上运行良好

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

可能与(
CREATE INDEX修改表名大小写)有关:MySQL强制我的表名为小写,但这些表在MSL中映射为驼峰大小写

在没有所有这些问题的情况下,MySQL和实体框架是否真的可以一起工作


编辑

如果有帮助,请在手动重命名表时使用camel case

rename table mytable to mytable_bis
rename table mytable_bis to MyTable
没有比这更好的了


编辑2


如果您接受从这些表创建新实体,那么 你能注意到差异吗?我会注意的,如果你的 例如,表有主键

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

例如,我当前有一个名为
Zone
的简单实体与名为
Zones
的表关联。从数据库更新后,它将创建一个与表关联的名为
Zone1
的新实体。
区域
区域
之间的映射被破坏,并且在
区域1
区域
之间建立了新的映射

区域
区域1
实体
相同
(完全相同的属性、相同的主键…等等)

然后,我尝试删除所有以前的实体,并将所有
XXXX1
实体重命名为
XXXX
(例如,我删除了
区域
实体,然后将
区域1
重命名为
区域

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

然后我尝试从模型中重新生成SQL脚本。。。。它起作用了。。。但后来我试图再次从数据库中更新,问题又出现了。。。更新向导仍在尝试添加新实体


编辑3

终于解决了这个问题(多亏了daryal)!问题是模型属性中未指定我的数据库架构名称。。。使用SQL Server时,99%的时间是dbo,但默认情况下MySQL不是这样

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

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


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

<EntitySet Name="MasterSet" EntityType="Model1.Store.MasterSet" store:Type="Tables" Schema="dbo" />

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


将有助于使用实体框架设置mysql数据库。

如果您接受从这些表创建新实体,您会注意到哪些差异?例如,如果生成的表有主键,我会注意。@vucetica请查看更新的答案。由于您的回答,我发现了问题。我检查了SSDL,表名一切正常。。。但是模式是
dbo
,而不是我实际的模式名。。。有关如何修复详细信息,请参阅更新的问题。给你50块荣誉,谢谢!(编辑:我现在不能给你那50分,我要等20个小时;))很高兴帮助你,事实上你解决了问题,我帮了你。这非常有帮助,谢谢!在本期的前几周,我一直在手工编辑edmxfiles。