5

NHibernate と流暢なインターフェースに夢中になりました。後者は、リファクタリングをサポートする非常に優れたマッピングを可能にします (xml ファイルはもう必要ありません)。

しかし、誰も完璧ではないので、流暢な多対多のマッピングが欠けています。それがすでにそこにあるかどうか誰かが知っていますか?もしそうなら、単純なコード行がいいでしょう。

しかし、質問のヘッダーに固執するために、流れるような NHibernate マッピングと通常の NHibernate マッピングを組み合わせる方法はありますか。

現在、流暢なテスト セットアップには次の行を使用し、非流暢なテスト (XML マッピングを使用) には 2 番目のコード ブロックを使用します。流暢なIF AVAILABLEとXMLを使用するように流暢に伝えるにはどうすればよいですか...

        var cfg = new Configuration();
        cfg.AddProperties(MsSqlConfiguration.MsSql2005.ConnectionString.Is(_testConnectionstring).ToProperties());
        cfg.AddMappingsFromAssembly(typeof(CatMap).Assembly);
        new SchemaExport(cfg).Create(true, true);

        var persistenceModel = new PersistenceModel();
        persistenceModel.addMappingsFromAssembly(typeof(CatMap).Assembly);
        IDictionary<string, string> properties = MsSqlConfiguration.MsSql2005.UseOuterJoin().ShowSql().ConnectionString.Is(_testConnectionstring).ToProperties();
        properties.Add("command_timeout", "340");

        session = new SessionSource(properties, persistenceModel).CreateSession();

流暢でなければ...

        config = new Configuration();
        IDictionary props = new Hashtable();

        props["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider";
        props["dialect"] = "NHibernate.Dialect.MsSql2005Dialect";
        props["connection.driver_class"] = "NHibernate.Driver.SqlClientDriver";
        props["connection.connection_string"] = "Server=localhost;initial catalog=Debug;Integrated Security=SSPI";
        props["show_sql"] = "true";
        foreach (DictionaryEntry de in props)
        {
            config.SetProperty(de.Key.ToString(), de.Value.ToString());
        }
        config.AddAssembly(typeof(CatMap).Assembly);

        SchemaExport se = new SchemaExport(config);
        se.Create(true, true);

        factory = config.BuildSessionFactory();
        session = factory.OpenSession();

それだけです... クリス

PS: 私はこのサイトが本当に好きです。GUI は完璧で、すべての記事の質は素晴らしいです。私はそれが巨大になると思います:-) 登録する必要があります...

4

3 に答える 3

2

ManyToAnyは現在実装されていません(執筆時点)。

流暢なマッピングと流暢でないマッピングのセットアップに関しては、最初の例でほぼ完了です。

var cfg = MsSqlConfiguration.MsSql2005
  .ConnectionString.Is(_testConnectionstring)
  .ConfigureProperties(new Configuration());

cfg.AddMappingsFromAssembly(typeof(CatMap).Assembly); // loads hbm.xml files

var model = new PersistenceModel();
model.addMappingsFromAssembly(typeof(CatMap).Assembly); // loads fluent mappings
mode.Configure(cfg);

new SchemaExport(cfg).Create(true, true);

主な違いは、SchemaExportが最後であるということです。最初の例は実際に流暢なマッピングをロードしていたと思いますが、その時点ですでにスキーマが作成されています。

于 2008-12-23T13:01:53.330 に答える
2

Fluent NHibernate 内で完全にやりたいことを正確に行うことができます。

次のコードは、流暢な NHibernate 構文を使用して、可能な複数のアセンブリから HBM (xml) マッピング ファイル、流暢なマッピング、および規則を検索するセッション ファクトリを流暢に構成します。

var _mappingAssemblies = new Assembly[] { typeof(CatMap).Assembly };
var _autoPersistenceModel = CreateAutoPersistenceModel();
Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2005.ConnectionString(_testConnectionstring))
        .Mappings(m =>
                  {
                      foreach (var assembly in _mappingAssemblies)
                      {
                          m.HbmMappings.AddFromAssembly(assembly);
                          m.FluentMappings.AddFromAssembly(assembly)
                              .Conventions.AddAssembly(assembly);
                      }
                      m.AutoMappings.Add(_autoPersistenceModel );
                   })
        .ExposeConfiguration(c => c.SetProperty("command_timeout", "340"))
        .BuildSessionFactory();

他にも多くのオプションを利用できます。Fluent NHibernate データベースの構成

于 2009-12-12T05:29:16.283 に答える
2

FooからへのマッピングBaa:

HasManyToMany< Baa > ( x => Baas )
  .AsBag ( ) //can also be .AsSet()
  .WithTableName ( "foobar" )
  .WithParentKeyColumn ( "fooId" )
  .WithChildKeyColumn ( "barId" ) ;

の例を確認してくださいClassMapXmlCreationTester。デフォルトの列名も示されています。

于 2008-10-18T00:12:51.557 に答える