草庐IT

c# - 在 Database First 中更改实体和属性名称

coder 2024-05-30 原文

我正在启动一个新应用程序,该应用程序必须使用现有数据库,该数据库使用一些在 .net 中非常烦人的命名约定(表名以指定表的业务域的几个三元组开头,列名以表开头八卦,三卦都是大写的,用下划线等分隔,)。

我想做的是编写一个简单的重命名规则(这就像找到最后一个下划线并获取后面的所有内容一样简单)并将其应用到 Entity Framework 中。我真的不想在编辑器中一个一个地编辑名字,尤其是因为数据库可能会改变,我不想重复多次。

我正在使用 Database First(因为数据库已经存在并且它是“主数据库”)和 EF 4.x DbContext Generator,它开箱即用(尽管类和属性的命名很糟糕)。

我编辑了 T4 模板以重命名生成的实体和属性,但是当我尝试执行任何请求时,DbContext 对象找不到与我尝试请求的实体匹配的表,我得到这个异常(exception):

The entity type [Entity Name] is not part of the model for the current context.

很明显它找不到表的原因:当我动态更改它时,没有任何内容告诉它如何匹配实体名称和表。 我读到我可以在 OnModelCreating(DbModelBuilder modelBuilder) 方法中添加指令,但这在 Database First 中没有使用(默认的 T4 模板在其中添加了一个异常(exception),以防万一)。

所以现在我卡住了,我不知道如何指定匹配。

以下是我的几个想法,但不确定是否正确或可行:

  • 使用“复数/单数”API 更改实体的名称?听起来像是一个肮脏的解决方法。但它可能有效(虽然没有尝试)。
  • 寻找一种即时编辑 EDMX 文件的方法。
  • 之后编辑 EDMX,但这可能会使过程复杂化(在设计器中编辑,然后执行一个工具来改变 EDMX,然后运行自定义工具来重新生成实体和 DbContext...而今天我只需要在设计器中编辑).
  • 使用代码优先(因为通过 DbContext 类中的属性或指令,使用不同的实体名称似乎比使用表名称更容易),但听起来在现有数据库中使用它不会更复杂。

有什么想法吗?还是我错过了什么?

最佳答案

您将无法为此使用 T4 转换,因为您想要更改实际 .edmx 文件的内容以将您的商店实体名称(带有讨厌的前缀)映射到您经过净化的概念实体名称。

相反,您最好编写一个应用程序,将 .edmx 文件作为输入并清理概念模型标签下的名称,并修改映射名称以反射(reflect)经过清理的名称。我知道这是您的第三个选择,您希望尽可能避免这种情况,但这是最直接的方法。请记住,您只需在添加新表或列时运行此工具。

关于c# - 在 Database First 中更改实体和属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12182555/

有关c# - 在 Database First 中更改实体和属性名称的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  5. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  6. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  7. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  8. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  9. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  10. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

随机推荐