Entity framework Npgsql的EntityFramework6创建了无效的update语句

Entity framework Npgsql的EntityFramework6创建了无效的update语句,entity-framework,entity-framework-6,npgsql,Entity Framework,Entity Framework 6,Npgsql,我正在使用npgsqlef6提供程序(npgsqlv3.0.5.0)。我从现有数据库生成了模型。我可以访问数据库并读取记录,但更新现有记录失败 这是我的代码的简化版本: int jobId = 123; // some unique id Entities entities = new Entities(); Job job = entities.Jobs.First(j => j.Id = jobId); job.Status = 4; entities.SaveChanges(); /

我正在使用npgsqlef6提供程序(npgsqlv3.0.5.0)。我从现有数据库生成了模型。我可以访问数据库并读取记录,但更新现有记录失败

这是我的代码的简化版本:

int jobId = 123; // some unique id
Entities entities = new Entities();
Job job = entities.Jobs.First(j => j.Id = jobId);
job.Status = 4;
entities.SaveChanges(); // this line throws an exception
这是我从代码中得到的错误消息:

42601:在“(”处或附近出现语法错误
[NpgsqlException(0x80004005):42601:在“(”处或附近出现语法错误]
Npgsql.NpgsqlConnector.DoReadSingleMessage(DataRowLoadingMode DataRowLoadingMode,布尔返回NullForAsyncMessage,布尔isPrependedMessage)+445
Npgsql.NpgsqlConnector.ReadSingleMessage(DataRowLoadingMode DataRowLoadingMode,布尔返回NullForAsyncMessage)+282
Npgsql.NpgsqlCommand.Execute(CommandBehavior)+270
Npgsql.NpgsqlCommand.ExecuteOnQueryInternal()+177
Npgsql.NpgsqlCommand.ExecuteNonQuery()+21
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.b_u0(DbCommand t,DbCommandInterceptionContext`1c)+26
System.Data.Entity.Infrastructure.InternalDispatcher`1.Dispatch(目标目标,函数'3操作,TInterceptionContext拦截上下文,执行操作'3,执行操作'3)+129
System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand命令,DbCommandInterceptionContext interceptionContext)+602
System.Data.Entity.Internal.InterceptableDbCommand.ExecuteOnQuery()+151
System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.Execute(字典'2 identifierValues,列表'1 generatedValues)+1045
System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()+221
这是针对数据库运行的查询:

UPDATE (
    SELECT 
        "Jobs"."Id", 
        "Jobs"."Name", 
        "Jobs"."Created", 
        "Jobs"."Status"
    FROM "Jobs"."Jobs" 
    AS "Jobs"
) SET "Status"=$1 WHERE "Id" = $2
我知道这个查询显然无法处理嵌套的
SELECT
而不是表名


是否有人遇到相同的错误?是否有我可能错过的设置?

此错误是由受影响表上缺少主键造成的

.edmx
文件实际上包含以下消息:

警告6002:表/视图“[database.schema.TableName]”未定义主键。已推断出该键,并将该定义创建为只读表/视图。
从数据库更新模型时,Visual Studio还在“输出”选项卡中显示以下消息(在第一次生成模型时,我肯定错过了该消息):

生成模型时出现警告或错误。ServiceModel.edmxpress请参阅错误列表以了解更多详细信息。在运行应用程序之前,必须解决这些问题。