gpt4 book ai didi

postgresql - Entity Framework 和 PostgreSQL : quotation marks issue

转载 作者:行者123 更新时间:2023-11-29 13:44:19 27 4
gpt4 key购买 nike

我面临的问题是 pgAdmin 4 中的 SQL 查询。

Entity Framework(包括其 Core 版本)将表名和列名大写。

这意味着您的 SQL 将类似于

select e."Id", e."Text" from "Entries" e
where e."Text" like '%implicated%'

我在谷歌上搜索防止 Entity Framework 将名称大写的方法,但没有找到太多。

是否有避免将表名和列名用引号引起来的解决方法?

提前致谢!

最佳答案

很简单!


转到 OnModelCreating 方法。

你需要一个扩展方法(下面分享代码)

modelBuilder.NamesToSnakeCase();

创建 ModelBuilderExtensions 类并粘贴以下内容:

public static void NamesToSnakeCase(this ModelBuilder modelBuilder)
{
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
// Replace table names
entity.Relational().TableName = entity.Relational().TableName.ToSnakeCase();

// Replace column names
foreach (var property in entity.GetProperties())
{
property.Relational().ColumnName = property.Name.ToSnakeCase();
}

foreach (var key in entity.GetKeys())
{
key.Relational().Name = key.Relational().Name.ToSnakeCase();
}

foreach (var key in entity.GetForeignKeys())
{
key.Relational().Name = key.Relational().Name.ToSnakeCase();
}

foreach (var index in entity.GetIndexes())
{
index.Relational().Name = index.Relational().Name.ToSnakeCase();
}
}
}

您可以看到 ToSnakeCase 扩展方法 - 它在 StringExtensions 类中:

public static string ToSnakeCase(this string input)
{
if (string.IsNullOrEmpty(input)) { return input; }

var startUnderscores = Regex.Match(input, @"^_+");
return startUnderscores + Regex.Replace(input, @"([a-z0-9])([A-Z])", "$1_$2").ToLower();
}

删除数据库,重新创建迁移,然后运行 ​​dotnet ef database update - bingo!

enter image description here

关于postgresql - Entity Framework 和 PostgreSQL : quotation marks issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com