ActiveRecord mape:
[ActiveRecord("JobTitle",Schema="public")]
public class JobTitle :ActiveRecordValidationBase<JobTitle>
{
[PrimaryKey(Column = "Id")]
public virtual int Id { get; set; }
[Property(Column = "Description")]
public virtual string Description { get; set; }
[Property(Column = "Title", NotNull = true)]
public virtual string Title { get; set; }
}
数据库连接:
数据库配置:
public class DbConfig
{
public static void Configure()
{
var connectionString=ConfigurationManager.ConnectionStrings["PgConnection"].ConnectionString;
var source = ActiveRecordSectionHandler.Build(DatabaseType.PostgreSQL82,connectionString);
ActiveRecordStarter.Initialize(source, typeof(JobTitle));
}
}
在app上启动了init:
测试例如表:
//
// GET: /Home/
public string Index()
{
var jobTitle= JobTitle.TryFind(1);
return jobTitle.Title;
}
启用活动记录时出错:
跟踪是:
我理解请求是错误的。因为错误地发送到pg sql查询。 这个简单的查询我的“JobTitle”表:
select * from public.jobtitle => Castle Active Record
select * from public."jobtitle" => Pg
如何解决这个铸造问题?
答案 0 :(得分:4)
PostgreSQL标识符区分大小写; "JobTitle"
与"jobtitle"
不同。但是,未加引号的标识符 case-folded 为小写。 SQL标准需要进行大小写折叠。
这意味着如果您创建一个表格:
CREATE TABLE "JobTitle" (...)
你必须始终将其称为:
SELECT * FROM "JobTitle";
如果省略引号:
SELECT * FROM JobTitle;
PostgreSQL案例折叠JobTitle
到jobtitle
,您将收到有关表jobtitle
不存在的错误。
一致引用或使用所有小写标识符。
答案 1 :(得分:0)
我遇到了同样的问题,但 ActiveRecordStarter.CreateSchema(); 解决了我的问题。我想你必须在初始化ActiveRecordStarter之后放入这行代码。