2009-05-21 11 views
2

実際、質問は説明されているよりも複雑です。私はnhibernateの初心者です。私は外部キー列を持つテーブルをマップしたいと思っています。ほとんどのnhibernateサンプルでは、​​外部キー列の割り当ては、一般に、参照されたエンティティを設定することによって実装されます。つまり、CategoryId列がある場合、Categoryプロパティが必要です。サンプルでは、​​一般にCategoryプロパティが設定されています。私の場合、エンティティプロパティを設定するのではなく、外部キープロパティを設定する必要があります。nhibernateに外部キー列をマップする方法は?

public class Post 
{ 
    public virtual long Id { get; set; }; 
    public virtual string Content { get; set; }; 
    public virtual long CategoryId { get; set; }; 
    public virtual Category Category { get; set; }; 
} 

私は下のサンプルのように投稿エンティティを保存しようとしたときにカテゴリプロパティを設定したくありません。

Post post = new Post { Content = "content", Category = aCategoryEntity }; 
session.Save(post); 

以下のサンプルは、実装する方法です。

Post post = new Post { Content = "content", CategoryId = 3 }; 
session.Save(post); 

どうすれば取り除くことができますか?

+0

あなたがまだ立ち往生していない場合は、あなたのマッピングも投稿してください。 –

答えて

1

Session.Loadは私がここで使用したソリューションでした。

Post post = new Post 
{ 
    Content = "content", 
    Category = Session.Load<Category>(categoryId) 
}; 

session.Save(post); 
0

エンティティ "投稿"には、カテゴリIDとカテゴリプロパティの両方が必要ありません。

通常、カテゴリをマップすることもできます。ポストマッピングでは、外部キーを使用して2つを関連付けることになります。

その後、

session.Save(new Post(){ Category = new Category(){ Id = 3 } }); 

は、この情報がお役に立てば幸いです。このような何かを試みることができます。

+0

あなたの提案は私の心の中ですが、私はそのための正確な解決策を探しています。ところで、私はマッピングに流暢なnhibernateを使用しています。私は、そういうことをすることができる方法や他のものがあると思います。 –

+0

あなたはLiamの答えについて考える必要があります。このコードでは、カテゴリIDが有効かどうかを知る方法がないため、外部キーに違反して例外がスローされます。 –

+0

通常、テクノロジと闘っているように感じるときは、あなたがいるからです。 Postのプロパティとしてカテゴリオブジェクトを扱うことができるように再設計する機会があれば、頭痛の種をたくさん節約できます。 :) –

0

これがNHibernateで可能かどうかわかりません。 ORMの全体のポイントは、RDMS外部キーではなくオブジェクトを処理することです。

+0

私は知っている、これはベストプラクティスではなく、ORMにとっては例外的ですが、とにかくそれが必要です。 –

関連する問題