Fluent NHibernate の ReferencesAny についてはよく読んだことがありますが、完全な例は見ていません。おおむね理解できたと思いますが、理解できない部分があります。クラス マッピングReferencesAny(x => x.MemberName)
では、参照される 1 つ以上のクラスとの関係を定義するために使用されます。とはMemberName
? どのように定義され、データベースにデータを作成するためにどのように使用されますか。
3 つのテーブルがあり、1 つのテーブルのレコードは、他の 2 つのテーブルのいずれかのレコードを参照できます。最初の 2 つは自動マッピングされるため、Id フィールドは特に定義されていません。
public class Household
{
public virtual string Name { get; set; }
public virtual IList<AddressXref> AddressXrefs { get; set; }
}
public class Client
{
public virtual string Name { get; set; }
public virtual IList<AddressXref> AddressXrefs { get; set; }
}
AddressXref
テーブルを自動マップできるかどうかわかりません。もしそうなら、私もそれを行う方法を見つける必要があります。今のところ、Fluent を使用した従来の方法で行います。
public class AddressXref
{
public virtual int id { get; set; }
public virtual string TableName { get; set; }
public virtual Int32 Table_id { get; set; }
public virtual string Street { get; set; }
public virtual string City { get; set; }
}
class AddressXrefMap : ClassMap<AddressXref>
{
public AddressXrefMap()
{
Table("AddressXref");
Id(x => x.id);
Map(x => x.TableName);
Map(x => x.Table_id);
Map(x => x.Street);
Map(x => x.City);
ReferencesAny(x => x.TableRef)
.AddMetaValue<Household>(typeof(Household).Name)
.AddMetaValue<Client>(typeof(Client).Name)
.EntityTypeColumn("TableName")
.EntityIdentifierColumn("Table_id")
.IdentityType<int>();
}
}
私が助けを必要としている部分は、TableRef
で参照されているReferencesAny()
のメンバーがAddressXref
クラスでどのように定義されているかです。
また、データ レコードを作成するときにコードでどのように使用されますか? 私はそれがこれに似ていると思います:
Household Household = new Household();
Household.Name = "Household #1";
AddressXref AddrXref = new AddressXref();
AddrXref.Street1 = "123 Popular Street";
AddrXref.City = "MyTown";
AddrXref.TableRef = Household;
Session.SaveOrUpdate(AddrXref);
私は NHibernate で Fluent を使用するのが大好きですが、学習曲線にはまだ驚かされます。:)
ありがとう、ラス