使用 Entity Framework 将数据插入 PostgreSQL 时出现奇怪的语法错误
Weird syntax Error while Inserting data to PostgreSQL using Entity Framework
上下文:
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"
由于 EF,我不确定 Postgres 的语法究竟有什么问题。谁能告诉我这里有什么问题吗?
我检查了 Postgres 的日志。 entity framework 执行的插入语句是:
INSERT INTO "public"."test_table"("test_name") VALUES ('test') RETURNING "id"
entity framework 生成的命令没有任何问题。我使用的 Postgres 是 8.0.1,我猜它不支持 RETURNING 关键字。
我将不得不找到一些方法从插入查询中排除 RETURNING。
上下文:
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"
由于 EF,我不确定 Postgres 的语法究竟有什么问题。谁能告诉我这里有什么问题吗?
我检查了 Postgres 的日志。 entity framework 执行的插入语句是:
INSERT INTO "public"."test_table"("test_name") VALUES ('test') RETURNING "id"
entity framework 生成的命令没有任何问题。我使用的 Postgres 是 8.0.1,我猜它不支持 RETURNING 关键字。 我将不得不找到一些方法从插入查询中排除 RETURNING。