创建实体时的表名(包含/正则表达式) - 实体框架 - 表前缀
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")
,然后选择我需要的表,而无需考虑前缀。感谢您为我指明正确的方向。以上是关于创建实体时的表名(包含/正则表达式) - 实体框架 - 表前缀的主要内容,如果未能解决你的问题,请参考以下文章