2

これに関する例が見つかりません。Fluent NHibernate の基本的な理解を得ようとしていますが、適切なチュートリアルに関してはリソースが非常に不足しているようです。

次のようなテストクラスがあります。

public class User
{
    public virtual long ID { get; set; }
    public virtual string Username { get; set; }
    public virtual MoreDetails ExtendedDetails { get; set; }    
}

このような別のクラスでは:

public class MoreDetails
{
    public virtual long ID { get; set; }
    public virtual string Firstname { get; set; }
    public virtual long UserID { get; set; } // Foreign key in the DB
}

私のマッピングは正確にどのように見えるべきですか?

これを行うには、遅延ロードまたはイーガーロードのいずれかを使用して DB を適切にクエリするにはどうすればよいですか。

// user object instantiated using your provided example:
userObject.ExtendedDetails.Firstname

私はばかのように感じます..通常、私はドキュメントに従うことができますが、この種の使用法は非常に曖昧です. 誰かが私に適切な例を教えてくれますか (または例を挙げてください)?

Fluent NHibernate Web サイトから直接最新の Fluent NHibernate を使用しています。

よろしく、

化学薬品

4

2 に答える 2

2

ここでは、起動して実行するのに役立つ良いウォークスルーを示します: http://dotnetslackers.com/articles/ado_net/Your-very-first-NHibernate-application-Part-1.aspx

マッピングは次のようになります。これらのエンティティ間のマッピングのタイプとともに、アイデンティティをどのように生成したいかについて、いくつかの仮定を立てていることに注意してください。

public class User
{
    public int ID { get; set; }
    public string Username { get; set; }
    public MoreDetails ExtendedDetails { get; set; }
}

public class MoreDetails
{
    public int ID { get; set; }
    public string Firstname { get; set; }
    public User User { get; set; } // Foreign key in the DB
} 

public UserMapping()
{
    Not.LazyLoad();
    Id(e => e.ID).GeneratedBy.Identity();
    Map(e => e.Username).Not.Nullable();
    HasOne(x => x.ExtendedDetails)
        .Cascade
        .SaveUpdate();
}

public MoreDetailsMapping()
{
    Not.LazyLoad();
    Id(e => e.ID).GeneratedBy.Identity();
    Map(e => e.Firstname).Not.Nullable();
    References(x => x.User).Column("UserID");
}

リレーショナル データをクエリするには、nhibernate 内でセッションを開く必要があります。私は通常、これに沿ってヘルパーを作成します。

 public class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                    InitializeSessionFactory();

                return _sessionFactory;
            }
        }

        private static void InitializeSessionFactory()
        {
            _sessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                              .ConnectionString(@"Server=localhost\SQLExpress;Database=SomeDB;Trusted_Connection=True;")
                              .ShowSql()
                )
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<User>())
                .BuildSessionFactory();
        }

        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }

そこから、次のように直接クエリできます。

public IQueryable<User> Users
        {
            get { return NHibernateHelper.OpenSession().Query<User>(); }
        }

私はこれについて多くを省いていることに注意してください。うまくいけば、これがあなたの立ち上げと実行に役立つでしょう。

于 2011-10-25T03:59:34.700 に答える
0

データベースに2つのテーブル間に1対1のマッピングがある場合は、ClassMapでHasOneを使用する必要があります。HasOne(x => x.ExtendedDetails)

1対1のマッピングの詳細については、http://wiki.fluentnhibernate.org/Fluent_mappingを参照してください。

于 2011-10-25T02:35:32.377 に答える