Я много читал о ReferencesAny Fluent NHibernate, но не видел полного примера. Я думаю, что понимаю большую часть этого, но есть одна часть, которую я не понимаю. В сопоставлении классов ReferencesAny(x => x.MemberName)
используется для определения отношения к одному или нескольким классам, на которые ссылаются. Что такое MemberName
? Как он определяется и как используется для создания данных в базе данных.
У меня есть три таблицы, записи в одной таблице могут ссылаться на записи в одной из двух других таблиц. Первые два сопоставляются автоматически, поэтому поле 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);
Мне нравится использовать Fluent с NHibernate, но я все еще поражен кривой обучения. :)
Спасибо, Расс