1

我正在尝试使用包NpsqlNpsql.EntityFramework. 我有一个包含下表的数据库:

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.NpgsqlException
错误:42703:列 Extent1.Id 不存在
说明:HTTP 500.Error 处理请求。
详细信息:非网络异常。异常来源(应用程序或对象的名称):Npgsql。
异常堆栈跟踪:
在 Npgsql.NpgsqlState+d__0.MoveNext () [0x00000] 在:0 在 Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(布尔清理)[0x00000] 在:0

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

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

谢谢!

4

1 回答 1

2

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

于 2014-11-15T20:52:49.463 回答