8

ID列を持たないテーブルに対して流暢なNHibernateマッピングで指定するにはどうすればよいですか?

私はこのようなものが欲しい:

public sealed class CustomerNewMap : ClassMap<CustomerNew>, IMap
{
    public CustomerNewMap()
    {
        WithTable("customers_NEW");
        Not.LazyLoad();
        Not.Id(); // this is invalid...
        Map(x => x.Username);
        Map(x => x.Company);
    }
}

つまり、データベースで主キーが定義されていません(データベースであまり定義されていません)。

4

3 に答える 3

12

答えは次のとおりです。

  public CustomerNewMap()
  {
        WithTable("customers_NEW");
        Not.LazyLoad();
        Id(x => x.Username).GeneratedBy.Assigned();
        Map(x => x.Company);
  }
于 2009-08-17T16:22:47.717 に答える
5

これは質問に直接回答するものではありません..しかし、ここで受け入れられた回答へのコメントの問題に回答します。

元帳の SQL ビューでも同じ問題がありました。Id問題は、プロパティが一意でない場合に NHibernate が喜んで行を複製することです。私たちの場合..ビュー内で一意ではなかっCustomerAccountIdた .. として設定された元帳エントリがありました。Idそれを回避するために..行を一意にするために見つけたものに基づいた CompositeId をマップしました。私たちの場合、それは と の組み合わせでしCustomerAccountIdWeekEnding:

CompositeId()
    .KeyProperty(x => x.CustomerAccountId)
    .KeyProperty(x => x.WeekEnding);

これは、NHibernate が重複をマ​​ップしないようにするのに十分でした。

于 2013-12-10T21:41:12.987 に答える
0

同様のケースで、列名を明示的に設定する必要があることがわかりました。何かのようなもの

  Id(x => x.Username).Column("Username").GeneratedBy.Assigned();
于 2010-08-31T18:59:32.143 に答える