Npgsql.PostgresException:关系“表名”不存在'

时间:2020-09-27 19:48:30

标签: c# postgresql

我使用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放在我的表名之前,并将数据库名称放在我的表名之前。

1 个答案:

答案 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();
        }
    }