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
。
Zone
和Zone1
实体是相同的(完全相同的属性,相同的主键......等)。
然后我尝试删除所有以前的实体并将所有实体重命名XXXX1
为XXXX
(例如,我删除了Zone
实体,然后重命名Zone1
为Zone
)。
然后我尝试第二次从数据库更新:更新向导按预期工作(没有要创建的新实体,只有要更新的实体)。
然后我尝试从模型重新生成 SQL 脚本......它工作......但后来我尝试从数据库再次更新,问题又回来了......更新向导仍在尝试添加新实体.
编辑 3
终于解决了这个问题(感谢 daryal)!问题是我的数据库架构名称没有在模型属性中指定......使用 SQL Server 时,dbo
99% 的情况下,但默认情况下 MySQL 并非如此。
从数据库更新模型时,SSDL 会根据数据库的实际模式名称进行更新。
但是在从模型中再次生成数据库后,使用错误的数据库模式名称代替了好的数据库模式名称。这就是从数据库再次更新时失败的原因。
哦!
首先我要说的是,这不是一个直接的答案;但可能会指导您解决问题。首先使用 xml 编辑器打开 edmx 文件(右键单击 edmx 文件并选择打开方式)。在 edmx 文件中,有一些与对象数据库映射相关的部分,其中三个很重要。有ConceptualModels、StorageModels和映射节点。在存储节点中,检查表名是否正确:
<EntitySet Name="MasterSet" EntityType="Model1.Store.MasterSet" store:Type="Tables" Schema="dbo" />
Run Code Online (Sandbox Code Playgroud)
如果表名不正确,只需更改它们并更新映射部分中的相关数据即可。