Странный синтаксис Ошибка при вставке данных в PostgreSQL с использованием Entity Framework - PullRequest
0 голосов
/ 22 октября 2019

Контекст:

    public MyContext() : base("POSTGRE_TestDB") //For PostreSQL
    {

    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("public");
        base.OnModelCreating(modelBuilder);
    }
    public DbSet<testModel> testcase { get; set; }

Модель:

[Table("test_table")]
public class testModel
{
    [Key]
    //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int id { get; set; }
    public string test_name { get; set; }
}

Мой код:

var test = new testModel();
test.id = 10;
test.test_name = "test";
            try
            {
                //_context.Entry(test).State = EntityState.Added;
                _context.testcase.Add(test);
                _context.SaveChanges();
            }catch(...){...}


Запрос к той же базе данных работает как обычно. Проблема возникает при вставке строки. Ошибка:

System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> 
System.Data.Entity.Core.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> 
Npgsql.NpgsqlException: ERROR: 42601: syntax error at or near "RETURNING"

Я не уверен, что не так с синтаксисом именно Postgres из-за EF. Кто-нибудь может сказать мне, что здесь не так?

1 Ответ

0 голосов
/ 23 октября 2019

Я проверил логи Postgres. Оператор вставки, выполненный платформой сущностей, был:

INSERT INTO "public"."test_table"("test_name") VALUES ('test') RETURNING "id"

Нет ничего плохого в этой сгенерированной команде платформой сущностей. Postgres, который я использую, это 8.0.1, который, я думаю, не поддерживает ключевое слово RETURNING. Мне нужно будет найти способ исключить ВОЗВРАТ из запроса на вставку.

...