Мне кажется, у меня проблема с отображениями Fluent NHibernate, и я не могу понять, как мне следует настроить отображение, чтобы избежать проблемы.
У меня есть бизнес-объект (буквально "бизнес") и объект обзора. Каждый бизнес может иметь несколько обзоров, которые создаются на странице в пользовательском интерфейсе. Бизнес является собственностью Обзора следующим образом:
public class Business
{
public virtual int BusinessId {get;set;}
public virtual DateTime LastModified {get;set;}
public virtual IList<Review> Reviews {get;set;}
[... more removed for brevity ...]
}
public class Review
{
public virtual int ReviewId {get;set;}
public virtual string ReviewText {get;set;}
public virtual Business Business {get;set;}
[... more removed for brevity ...]
}
Мои отображения таковы:
public class ReviewMap : ClassMap<Review>
{
public ReviewMap()
{
WithTable("Reviews");
Id(x => x.ReviewId).TheColumnNameIs("ReviewId").GeneratedBy.Identity();
References(x => x.Business).TheColumnNameIs("BusinessId");
Map(x => x.ReviewText);
[... and so on...]
}
public class BusinessMap : ClassMap<Business>
{
public BusinessMap()
{
WithTable("Businesses");
Id(x => x.BusinessId).TheColumnNameIs("BusinessId").GeneratedBy.Identity();
Map(x => x.Name).TheColumnNameIs("BusinessName");
Map(x => x.LastModified, "LastModifiedOn");
HasMany<Review>(x => x.Reviews)
.Inverse()
.LazyLoad();
[... more removed for brevity ...]
}
}
Код хранилища
public void Save(T entity)
{
using (ISession session = GetSession())
using (ITransaction tx = session.BeginTransaction())
{
session.SaveOrUpdate(entity);
tx.Commit();
}
}
В коде я назначаю свойства объекту Review и вызываю метод Save репозитория.
Проблема в том, что, поскольку я не обновляю Business per se, я не ожидаю, что он будет сохранен - все, что я хочу, - это сохранение отзыва. Но код пытается сохранить также и Business, и я получаю исключение, поскольку я не установил свойство «LastModified» - и не хочу, поскольку я сохраняю ОБЗОР, а не бизнес.
Как мне настроить отображение, чтобы это произошло?