我使用Npgsql版本4.0.4编写以下代码。
var cmd = new NpgsqlCommand("INSERT INTO TableName (Id, DateTime, Dummy) VALUES (@id, @datetime, @dummy)", con);
cmd.Parameters.AddWithValue("id", new Guid());
cmd.Parameters.AddWithValue("datetime", DateTime.Now.ToString());
cmd.Parameters.AddWithValue("dummy", "foo");
我已经在另一个程序中使用Entity Framework创建了表。 但是,出现以下错误:
Npgsql.PostgresException:'42P01:关系“表名”不存在”
我尝试将public放在我的表名之前,并将数据库名称放在我的表名之前。
答案 0 :(得分:1)
我想我以前已经看过这种情况,EF Core暗示该表不存在。就我而言,由于在Postgres中表名是小写的(在Oracle中是大写的)
可能尝试小写表名吗?
public static class DataContextExtensions
{
public static void LowercaseRelationalTableAndPropertyNames(this ModelBuilder modelBuilder)
{
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
entity.SetTableName(entity.GetTableName().ToLowerInvariant());
foreach (var property in entity.GetProperties())
{
property.SetColumnName(property.GetColumnName().ToLowerInvariant());
}
}
}
}
...以及您的DataContext中...
public class DataContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.LowercaseRelationalTableAndPropertyNames();
}
}