具有Entity Framework 6和PostgreSQL的Mono中不存在列Extent1.Id
我试图使用包Npsql
和Npsql.EntityFramework
映射到具有Entity Framework的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 }
在数据库上下文中,我将模式映射到public,因为PostgreSQL中默认情况下所有表都在模式公共中。
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("public"); }
现在,当我打开试图访问DbContext的Crops的视图时,我收到以下消息:
Npgsql.NpgsqlException
错误:42703:列Extent1.Id不存在
描述:HTTP 500.Error处理请求。
详细信息:非Webexception。 exception来源(应用程序或对象的名称):Npgsql。
exception堆栈跟踪:
at Npgsql.NpgsqlState + d__0.MoveNext()[0x00000] in:0 at Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(Boolean cleanup)[0x00000] in:0
好消息是数据库现在可以找到表(它最初不能 ,但它可以与OnModelCreating
方法中的公共模式映射)。 但是,它找不到列名Extend.Id
。
为什么它试图寻找Extend.Id
超出我的范围。 我们已将Crops
模型上的属性定义为Id
,为什么它会查找Extend.Id
? 但考虑到这种情况,我怎样才能让它发挥作用? 我可以使用属性Extend1.Id
而不是Id
来创建数据库表吗? 如果是这样,我该怎么做?
谢谢!
我确信您的代码中某处存在打字错误。 表“Id”根本不存在。 可能是大写字母?