У меня есть сущность, которая имеет отношение «многие ко многим». В качестве примера рассмотрим эту сущность:
public class User
{
public int ID { get; set; }
public string UserName { get; set; }
public virtual ICollection<User> Friends { get; set; }
}
Вот как я настраиваю сопоставление:
HasMany(t => t.Friends).WithMany()
.Map(m => {
m.MapLeftKey("UserID");
m.MapRightKey("FriendID");
m.ToTable("UserFriends");
});
Поскольку эти отношения теперь управляются EF, у меня действительно нет доступа к UserFriends
DbSet
в моем коде, и я не могу обрабатывать одновременный доступ к нему. Чтобы эта композиция могла обрабатывать параллельный доступ (добавлять/удалять), нужно ли мне самому обрабатывать отношение «многие ко многим», а затем добавлять столбец [Timestamp]
или есть способ указать EF, чтобы он сам обрабатывал это одновременно? Как конфигурация в построителе моделей.
Изменить: я использую EF 6, и в настоящее время, если есть параллельная операция с объектом (например, попытка удалить друга, который в настоящее время не выходит из базы данных), я получаю следующее сообщение об ошибке и DbUpdateException
:
Произошла ошибка при сохранении сущностей, которые не предоставляют свойства внешнего ключа для своих связей. Свойство EntityEntries вернет значение null, поскольку один объект не может быть идентифицирован как источник исключения. Обработку исключений при сохранении можно упростить, предоставив свойства внешнего ключа в ваших типах сущностей. Подробнее см. InnerException.
DBUpdateException
, а неOptimisticConcurrencyException
, с которым можно правильно обращаться. - person Farhad Alizadeh Noori   schedule 22.04.2015DBUpdateException
? Кроме того, просто для ясности, какую версию EF вы используете? - person Asad Saeeduddin   schedule 22.04.2015