#c# #nhibernate #fluent-nhibernate #nhibernate-mapping
#c# #nhibernate #свободно-nhibernate #nhibernate-сопоставление
Вопрос:
У меня есть 2 класса, которые ссылаются друг на друга. Это странная ситуация, которая нужна нашей CRM.
У меня есть таблицы и классы организации и EmAddress. Организация наследует от подписчика, у которого также есть таблица. Я думаю, что это может быть моей проблемой или тем фактом, что я не могу установить обратное для них, потому что нет «hasMany»…
Порядок вставки / обновления таков .. ВСТАВИТЬ адрес электронной почты ВСТАВИТЬ АДРЕС ЭЛЕКТРОННОЙ почты для обновления организации, чтобы установить Email.Subscriber
Email.Subscriber должен быть «NOT NULL», так что это не сработает. Как я могу изменить порядок, я не могу использовать обратный, потому что списка нет. Всего 2 ссылки.
public class Organization : Subscriber
{
public override string Class { get { return "Organization"; } }
EmAddress PrimaryEmailAddress {get;set;}
}
public class OrganizationMap : SubclassMap<Organization>
{
public OrganizationMap()
{
Table("Organization");
KeyColumn("Organization");
References(x => x.PrimaryEmail,"PrimaryEmailAddress").Cascade.SaveUpdate();
}
}
public EmAddressMap()
{
Id(x => x.Id, "EmAddress");
Map(x => x.EmailAddress, "eMailAddress");
References<Subscriber>(x => x.Subscriber,"Subscriber").LazyLoad().Fetch.Select().Not.Nullable();
/*not.nullable() throw s error. NHibernate INSERTS email, INSERTS org, UPDATES email. */
}
public class EmAddress
{
public virtual Guid Id { get; set; }
public virtual string EmailAddress { get; set; }
public virtual Subscriber Subscriber { get; set; }
}
//Implementation
var session = NHIbernateHelper.GetSession();
using(var tx = session.BeginTransaction())
{
var org = new Organization();
org.PrimaryEmail = new EmAddress(){Subscriber = org};
session.Save(org);
tx.commit();
}
Ответ №1:
Этот пост может помочь: http://ayende.com/blog/3960/nhibernate-mapping-one-to-one
Только одна сторона использует много-к-одному (свободно: «Ссылки»), а другая сторона использует один-к-одному (свободно: «hasOne»).
Комментарии:
1. Спасибо, я видел этот пост раньше, но не думал, что он применим здесь. CRM, которая находится поверх этой базы данных, имеет некоторые бизнес-правила, которые приводят к тому, что наша схема БД отличается от предполагаемой.