5

私は Entity Framework から NHibernate に移行しています。ドメイン エンティティの作成方法を見ていると、一部の例で外部キー関係の列が含まれていないことに気付きました。Sessionクラスにはメソッドが含まれているためLoad()、主キーの代わりにデータベースにアクセスせずにオブジェクトのみを使用できます。これは、NHibernate でエンティティ モデルを構築するときの通常の方法ですか。

エンティティの例

public class BlogPost : Entity
{
    public virtual string Name { get; set; }

    //Should this be here
    public virtual int AuthorID { get; set; }

    public virtual Author Author { get; set; }
}

エンティティの作成

BlogPost post = new BlogPost
{
    Name = "My first post",
    Author = session.Load<Author>(1) //Avoids hitting the database
};

session.Save(post);

- また - -

BlogPost post = new BlogPost
{
    Name = "My first post",
    AuthorID = 1 //Use the id of the object
};

session.Save(post);
4

1 に答える 1

4

外部キーを持つ代わりに、完全なエンティティ/オブジェクトを使用する必要があります。

外部キーはデータベースの概念です。オブジェクト指向プログラミングを行っている場合、それらはあまり意味がありません。OOP を実行するときは、オブジェクトを一緒に構成しています。あなたの場合、 aBlog には のコレクションがありPostsます。親などPost があります。Blog

エンティティ ID は、エンティティを一意に識別するためにのみ使用されます。

オブジェクト リレーショナル マッピングの要点は、OOP のベスト プラクティス (オブジェクト)、データベースのベスト プラクティス (リレーショナル) を使用できるようにし、それらの間で概念を混在させないようにすることです (それが、名前のマッピング部分が表すものです)。

一部の ORM は、これに従う点で他のものよりも優れています。ヒント: Hibernate .

于 2012-07-23T21:11:59.610 に答える