0

これは中程度の初心者の質問だと思います。私は NHibernate/FluentNHibernate を約 6 か月ほど使用しており、基本をかなり理解していると思います。今、私は少し先に進んでいます。これは文書化されていると確信していますが、Googleで数時間を費やしましたが、よくわかりません.

私は単純なクラスを持っています。それをSimpleと呼びます:

public class Simple
{ public string Name { get; set;}
  public string Desc { get; set; }
  public string Status { get; set;}
}

ステータスは、実際には、「ACTIVE」、「ON-HOLD」、および「CLOSED」の小さな値セットのいずれかに制限されます。DB スキーマには、RetrofitStatus という単純な読み取り専用テーブルがあります。

CREATE TABLE [dbo].[RetrofitStatus](
[Status] [nvarchar](10) NOT NULL,
[SortOrder] [smallint] NOT NULL,
CONSTRAINT [PK_RetrofitStatus] PRIMARY KEY CLUSTERED 
(
    [Status] ASC
)

また、Simple テーブルには、Status が RetrofitStatus であることを確認するための外部キー制約があります。

RetrofitStatus テーブルの目的は、(SQL で) 実行できるように SortOrder 列を含めることです。

SELECT * from Simple s join RetrofitStatus r on r.Status=s.Status ORDER BY r.SortOrder

結果を表示順序に並べ替えます (たとえば、最初にすべての ACTIVE エントリ、次に ON-HOLD エントリ、次に CLOSED エントリ。これは、アルファベット順やその他の簡単に認識できる順序ではなく、論理的な順序で並べ替えているためです)。

私の質問は、FNH でそのオブジェクトと関係をどのようにモデル化するかということです。SortOrder プロパティを Simple 定義に追加して、それを表すビューを作成できますが、新しい Simple オブジェクトをテーブルに挿入しようとするとどうなるでしょうか? 明らかに、SortOrder プロパティを挿入しようとはしません。どうにかして NHib 要素を使用する必要があると思いますが、繰り返しますが、それがどこに必要なのか、挿入時に何が起こるのか、Fluent でそれを行う方法が明確ではありませんか?

試行錯誤して実験してみますが、彼らが何をしているのかを知っている人 (私は知りません) が、私を正しい方向に向けて時間を節約できるのではないかと思いました. ご協力いただきありがとうございます。

4

1 に答える 1

1

次のように変更されたクラスがあると仮定しますSimple(キーについて何をしているのかわかりませんでした):

public class Simple
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public string Status { get; set; 
    public int SortOrder { get; set; }
}

次のようにマッピングできます。

public SimpleMap : ClassMap<Simple>
{
    Id(x => x.Id).Unique().GeneratedBy.Native();
    Map(x => x.Name);
    Map(x => x.Desc);
    Join("RetrofitStatus", join =>
    {
        join.KeyColumn("Status") 
            .Map(x => x.Status);
        join.Map(x => x.SortOrder).Not.Insert();
    });
}

私はこれをテストしていませんが、これがその要点です。

または を使用してプロパティをマッピングで挿入または更新できないように指定しNot.Insert()たり、 を使用してプロパティを挿入または更新できないように指定したりできます。Not.Update()ReadOnly()

于 2010-04-10T11:33:58.273 に答える