创建实体时的表名(包含/正则表达式) - 实体框架 - 表前缀

Posted

技术标签:

【中文标题】创建实体时的表名(包含/正则表达式) - 实体框架 - 表前缀【英文标题】:TableName (Contains / Regex) When Creating An Entity - Entity Framework - Table Prefix 【发布时间】:2020-05-28 18:01:59 【问题描述】:

我正在尝试基于现有 mysql 数据库创建 EF 模型。 创建实体后,我使用以下方法对其进行映射:

[Table("databaseName.tableName")] 或:

modelBuilder.Entity<Lang>().ToTable("tableName")OnModelCreating

我遇到的问题是表名可能有意外的前缀。 我想要做的是,在不知道前缀的情况下,搜索数据库中的任何表:

(类似)EndsWith("tableName") 使用它,或者:

哪个名称与Regex 匹配。

这可行吗?另一种方法是向用户询问特定于他/她的数据库的 TablePrefix 并使用它 (modelBuilder.Entity<Lang>().ToTable(prefix + "tableName"),但这很不方便。由于前缀是唯一可以从数据库更改为另一个的东西,因此能够通过名称检测表非常有帮助。

【问题讨论】:

【参考方案1】:

您无法在 OnModelCreating 中查询数据库,但您可以使用连接字符串打开到数据库的 ADO.NET 连接并运行查询以检索表名并构建实体类型与表之间的映射名字。

【讨论】:

非常感谢!我希望有一个内置功能,允许对表名甚至属性进行字符串匹配。但这会做。我最终创建了一个额外的 DbContext,仅用于在主实体模型的 OnModelCreating 中执行 tableNamesModel.Database.SqlQuery<string>("show tables from dbName"),然后选择我需要的表,而无需考虑前缀。感谢您为我指明正确的方向。

以上是关于创建实体时的表名(包含/正则表达式) - 实体框架 - 表前缀的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义与 EDMX(模型优先)实体框架 4.1 一起使用的表名?

实体框架数据库首先是多个模式重复的表名

如何创建可重用的实体框架投影表达式?

具有 2 个外键实体框架的表

实体框架创建复数表名,但视图需要一个单数表名?

实体框架 ORM 不创建模型/表 [关闭]