Entity Framework:数据库优先模式下表名相似引发复数化问题
嘿,这个EDMX里的表命名冲突问题我之前也碰到过,开启复数化后遇到相似表名确实容易踩坑,给你几个靠谱的解决办法:
方案1:先关闭复数化,手动导入后再调整
这是最直接的办法,先避免自动复数化的干扰:
- 打开EDMX设计器,在模型浏览器里右键点击你的模型,选择属性。
- 找到复数化外键名和复数化新对象名这两个选项,把它们都设为
False,临时关闭复数化功能。 - 现在重新导入
tblVideos表,系统不会自动给它加后缀1,实体名会直接对应tblVideos。 - 如果其他表需要保持复数化,你可以手动修改那些表的实体名,或者再重新开启复数化——此时已经导入的
tblVideo和tblVideos不会被自动修改,冲突就解决了。
方案2:直接编辑EDMX的XML,锁定映射关系
如果之前重命名实体后拉取模型又还原,说明存储模型和概念模型的映射没固定住,直接改XML更彻底:
- 右键你的EDMX文件,选择打开方式 -> XML(文本)编辑器。
- 找到存储模型(
<edmx:StorageModels>节点下)里类似这样的行:
<EntitySet Name="tblVideo1" EntityType="Model.Store.tblVideos" Schema="dbo" />
把Name属性改成你想要的存储层实体名(比如tblVehicleVideoClipStore,和概念层名字区分开)。
- 再找到概念模型(
<edmx:ConceptualModels>节点下)对应的实体集,确保它的映射正确:
<EntitySet Name="tblVehicleVideoClip" EntityType="Model.tblVehicleVideoClip" />
- 最后检查映射部分(
<edmx:Mappings>节点下)的<MappingFragment>,确保StoreEntitySet属性指向你刚才修改的存储层实体名:
<MappingFragment StoreEntitySet="tblVehicleVideoClipStore">
- 保存XML后,再更新模型时就不会自动还原成
tblVideo1了。
方案3:数据库临时重命名的小技巧
这是个临时的 workaround,但胜在简单:
- 先把数据库里的
tblVideos表临时重命名为tblVehicleVideoClip。 - 开启复数化导入这个表,此时实体名会变成
tblVehicleVideoClips(如果想要单数可以手动改回)。 - 导入完成后,把数据库里的表改回
tblVideos,再回到EDMX的存储模型里,把对应的表名改回tblVideos,保持映射关系不变就行。
另外提醒一下:每次更新模型时,尽量选择更新模型从数据库里的“添加特定表”或“刷新特定表”,别用全量更新,这样能减少自动命名冲突的概率。
内容的提问来源于stack exchange,提问作者aokelly
相关产品推荐
相关产品推荐

