我正在尝试使用包Npsql
和Npsql.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
吗?如果是这样,我该怎么做?
谢谢!