У меня есть класс компании, в котором есть коллекция Address.
Вот мой класс Address: (написано в верхней части моей головы):
public class Address
{
public string Civic;
public string Street;
public City City;
}
Это класс City:
public class City
{
public int Id;
public string Name;
public string SearchableName{ get { //code } }
}
Адрес сохраняется в его собственной таблице и имеет ссылку на идентификатор города. Город также сохранился в собственном столе.
Имя города для поиска используется для предотвращения некоторых ошибок в городе, который вводит пользователь. Например, если название города - «Монреаль», поисковое имя будет «Монреаль». Если название города - "Сент-Джон", поиск будет доступен для поиска "stjohn" и т. Д.
Он используется в основном для поиска и предотвращения наличия нескольких городов с опечаткой.
Когда я сохраняю адрес, я хочу, чтобы слушатель / событие проверяли, есть ли город уже в базе данных. Если да, то отмените вставку и замените город пользователя на город базы данных. Хотелось бы того же поведения с обновлениями.
Я пробовал это:
public bool OnPreInsert(PreInsertEvent @event)
{
City entity = (@event.Entity as City);
if (entity != null)
{
if (entity.Id == 0)
{
var city = (from c in @event.Session.Linq<City>()
where c.SearchableName == entity.SearchableName
select c).SingleOrDefault();
if (city != null)
{
//don't know what to do here
return true;
}
}
}
return false;
}
Но если в базе данных уже есть Город, я не знаю, что делать. @ event.Entity доступен только для чтения, если я устанавливаю @ event.Entity.Id, я получаю исключение «нулевой идентификатор». Я пытался перехватить вставку / обновление на адресе и на компании, но город, если он был вставлен первым (это логика ...)
Есть предположения?
Спасибо