0

ActiveRecordマップ:

[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; }

}

ここに画像の説明を入力

DB接続:

ここに画像の説明を入力

データベース構成:

 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)); 


    }


}

そして、アプリの初期化が開始されました:

ここに画像の説明を入力

たとえば、テーブルをテストします。

    //
    // GET: /Home/
    public string Index()
    {
        var jobTitle= JobTitle.TryFind(1);

        return jobTitle.Title;
    }

アクティブ レコードの取得中にエラーが発生しました:

ここに画像の説明を入力

トレースは:

ここに画像の説明を入力

リクエストがエラーであることは理解しています。そして、私の「JobTitle」テーブルに対するこの単純なクエリ:

  select * from public.jobtitle => Castle Active Record
  select * from public."jobtitle" => Pg 

このキャストの問題を解決するにはどうすればよいですか?

4

2 に答える 2

4

PostgreSQL 識別子は大文字と小文字が区別されます。"JobTitle"と同じではありません"jobtitle"。ただし、引用符で囲まれていない識別子は大文字と小文字が変換されます。大文字と小文字の折り畳みは、SQL 標準で必要です。

これは、次を使用してテーブルを作成した場合を意味します。

CREATE TABLE "JobTitle" (...)

一貫して次のように参照する必要があります。

SELECT * FROM "JobTitle";

引用符を省略した場合:

SELECT * FROM JobTitle;

PostgreSQL は大文字と小文字を区別し、テーブルが存在しないというエラーが表示JobTitleされjobtitleます。jobtitle

一貫して引用するか、すべて小文字の識別子を使用してください。

詳細については、ユーザー マニュアルの字句構造セクションを参照してください。

于 2013-05-02T05:01:30.373 に答える
0

私は同じ問題を抱えていますが、ActiveRecordStarter.CreateSchema(); 私の問題を解決します。ActiveRecordStarter の初期化の後に、このコード行を配置する必要があると思います。

于 2014-01-07T10:44:12.510 に答える