列 Extent1.Id 在Mono中不存在Entity Framework 6和PostgreSQL

本文关键字:Framework Entity PostgreSQL 不存在 Extent1 Id Mono | 更新日期: 2023-09-27 18:30:38

我正在尝试使用NpsqlNpsql.EntityFramework包映射到带有实体框架的PostgreSQL数据库。我有一个包含下表的数据库:

CREATE TABLE IF NOT EXISTS Crops (
  Id            INT PRIMARY KEY     NOT NULL,
  Name          TEXT                NOT NULL,
  SowingMonths  INT
);

Crop模型如下所示:

public class Crop
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Month SowingMonths { get; set;} //Month is an enum
}       

在数据库上下文中,我将模式映射到公共,因为默认情况下,所有表在PostgreSQL中都处于模式公共中。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.HasDefaultSchema("public");
}

现在,当我打开尝试访问 DbContext 作物的视图时,我收到以下消息:

Npgsql.Npgsql异常
错误: 42703: 列 Extent1.Id 不存在
描述: HTTP 500.处理请求时出错。
详细信息:非 Web 异常。异常来源(应用程序或对象的名称): Npgsql.Exception
stack trace:at Npgsql.NpgsqlState
+d__0.MoveNext () [0x00000] in :0at Npgsql.ForwardsOnlyDataReader.GetNextResponseObject (Boolean cleanup) [0x00000] in :0

好消息是数据库现在可以找到表(起初它不能,但它可以通过OnModelCreating方法映射到公共架构)。但是,它找不到列名Extend.Id

为什么它试图寻找Extend.Id超出了我的范围。我们已经将Crops模型上的属性定义为Id,那么它为什么要寻找Extend.Id呢?但考虑到这种情况,我怎样才能让它工作?我可以只创建一个带有属性Extend1.Id而不是Id的数据库表吗?如果是这样,我该怎么做?

谢谢!

列 Extent1.Id 在Mono中不存在Entity Framework 6和PostgreSQL

我确信您的代码中某处存在印刷错误。表"Id"根本不存在。也许是大写字母?