У меня есть класс компании, в котором есть коллекция адресов.
Вот мой класс адресов: (написано в верхней части моей головы):
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 } }
}
Адрес сохраняется в его собственной таблице и имеет ссылку на идентификатор города.Города также сохраняются в собственной таблице.
SearchableName города используется, чтобы предотвратить некоторые ошибки в городе типа пользователя.Например, если название города - «Монреаль», имя для поиска будет «Монреаль».Если название города - «Св. Иоанн», то имя для поиска будет «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, я получаю исключение «нулевой идентификатор».Я пытался перехватить вставку / обновление по адресу и по компании, но по городу, если первым вставить его (это логика ...)
Есть мысли?
Спасибо