2017-10-16 21 views
0

でカスタムオブジェクトを使用することができ、以下のドメインオブジェクトを参照してください:予想通り、この作品は、どのように私はNHibernateは

public class PersonMap : ClassMapping<Person> 
{ 
    public PersonMap() 
    { 
     Id<Guid>(x => x.Id); 
     Property<string>(x => x.FirstName); 
     Property<string>(x => x.Surname); 
     Property<DateTime>(x => x.DateOfBirth); 
    } 

}

:下回る

public Class Person 
{ 
    public virtual Guid Id { get; protected set; } 
    public virtual string FirstName { get; protected set; } 
    public virtual string Surname { get; protected set; } 
    public virtual System.DateTime DateOfBirth { get; protected set; } 

     //Domain methods are here. 

} 

とNHibernateのマッピングを。ドメインモデルを次のように変更したいとします。

public Class Person 
{ 
    public virtual Guid Id { get; protected set; } 
    public virtual FirstName FirstName { get; protected set; } 
    public virtual Surname Surname { get; protected set; } 
    public virtual DateOfBirth DateOfBirth { get; protected set; } 
} 

プリミティブ型がオブジェクトに置き換えられていることに注意してください。私がこれをやっている理由は、ここに記載されているように原始的な強迫観念を取り除くことです:http://enterprisecraftsmanship.com/2015/03/07/functional-c-primitive-obsession/

私はここの文書(144ページ):http://stc.sbu.ac.ir/AdminTools/Docs/Files/nhibernate_reference.pdfを読んでいます。カスタムタイプを導入するように指示しています。私もこの質問を読んだ:nHibernate mapping to custom types。私はまだNHibernateのコードマッピングとこれを行うために苦労しているので、質問の理由。

+3

あなたはコンポーネント(https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping#components)を介してそれらをマッピングを見たことがありますか?データが同じテーブルにある場合、これは簡単な出発点になるかもしれません。 –

+0

@David Osbourne、+1 - このリンクは、行為に非常に役立ちました。 Fluent NHibernateのコードをコードマッピングに適用したところ、期待通りに機能するようになりました(私の答えを見てください)。私はいくつかのクレジットを与えることができるように答えを投稿できますか? – w0051977

答えて

1

は、あなたがcomponents経由でそれらをマッピングを見たことがありますか?

あなたのデータの場合、これは、同じテーブルで、カスタムタイプに比べて簡単に出発点、であるかもしれません。

+0

コンポーネントを参照してください。 +1。 – w0051977

+0

私はあなたの答えに印を付ける前に。 NHibernateフィールドをクラスプロパティの代わりにクラスコンストラクタにマップすることが可能かどうかを知っていますか(私の答えはクラスプロパティを使用しました)? – w0051977

+0

それについてはわかりません。ここを見れば(http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property)、利用可能なアクセス方法がわかります。コンストラクタがサポートされているようには見えません。 –

0

次はDavid Osbournesのコメントです。答えはこれを行うことでした:

Component(x => x.FirstName, y => 
       { 
        y.Property<string>(z => z.FirstName); 
       }); 

クラスのFirstNameプロパティを使用してデータベースにマップするNHibernate。