“从数据库更新模型”向导正在删除重命名的POCO类的映射

时间:2013-04-17 08:31:02

标签: c# oracle entity-framework visual-studio-2012 ef-database-first

我正在构建一个使用EF 5与现有Oracle数据库通信的应用程序。我不允许更改数据库架构的任何部分。我使用VS2012向导从数据库生成了我的模型,所有类都以Oracle对应的名字命名。

数据库中对象的命名是QUITE_UGLY_AND_INCONSISTENT,因此我想重命名POCO类和属性。我可以从EDM Designer轻松完成。结果,我得到了整齐命名的类和属性名称,它们从数据库映射到UGLY_NAMED表。我可以成功执行查询,一切顺利。正是我想要的。

但是,当我需要向模型添加新表时,我运行“从数据库更新模型”向导并检查要导入的其他表。它突然在Delete选项卡下列出了我重命名的(但仍然正确映射的)类,说它无法在数据库中找到它们。当我单击Finish时,我的现有类被取消映射,我必须手动将每个属性重新映射到其对应的DB列...或者从版本控制回滚到以前版本的EDMX文件。

我正在寻找认为这个问题最优雅的解决方案,因为我需要应用程序尽可能保持可维护性。我强烈赞成一种方法,它允许我从数据库中自动生成新类,同时保留现有的重命名对象及其映射。

  • 我是否忽略了一些阻止更新模型向导删除现有映射的方法?
  • 我应该使用不同的方法重命名生成的类吗?
  • 我应该保持生成的类不变,而是构建一个明确命名的包装类,这些类会暴露给我的应用程序的其余部分吗?
  • 我应该避免自动生成,而是采用代码优先的方法吗?这是一个非常不利的选择,因为我需要花费在手动模型编码和映射上的时间尽可能少。添加对象将是一项非常频繁的任务。
  • 我是否应该甚至完全使用不同的ORM ..?

1 个答案:

答案 0 :(得分:0)

我自己发现了罪魁祸首:运行“从模型生成数据库”向导,因为我在某处阅读了一篇文章中的建议。它将所有模型的基础表和列名称更改为SQL Server标准名称([dbo]。[Customers]。[CustomerID]等。)。