【发布时间】:2015-01-12 22:45:17
【问题描述】:
我正在尝试使用包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.NpgsqlException
错误:42703:列 Extent1.Id 不存在
说明:HTTP 500.错误处理请求。
详细信息:非 Web 异常。异常来源(应用程序或对象的名称):Npgsql.
异常堆栈跟踪:
在 Npgsql.NpgsqlState+d__0.MoveNext () [0x00000] in :0 在 Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(布尔清理)[0x00000 ] 在 :0
好消息是数据库现在可以找到该表(起初它可以找到not,但它可以通过OnModelCreating 方法中映射到公共模式)。但是找不到列名Extend.Id。
为什么它试图寻找Extend.Id 超出了我的理解。我们已经将Crops 模型上的属性定义为Id,那它为什么要查找Extend.Id?但考虑到这种情况,我怎样才能让它工作呢?我可以只使用属性Extend1.Id 而不是Id 创建一个数据库表吗?如果是这样,我该怎么做?
谢谢!
【问题讨论】:
标签: c# entity-framework postgresql mono ef-fluent-api