列 Extent1.Id 在Mono中不存在Entity Framework 6和PostgreSQL
本文关键字:Framework Entity PostgreSQL 不存在 Extent1 Id Mono | 更新日期: 2023-09-27 18:30:38
我正在尝试使用Npsql
和Npsql.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
的数据库表吗?如果是这样,我该怎么做?
谢谢!
我确信您的代码中某处存在印刷错误。表"Id"根本不存在。也许是大写字母?