Я использую EF4. Я добавляю ряд новых объектов из списка DTO и не сохраняю изменения до тех пор, пока все они не будут добавлены. Я хочу установить идентификаторы DTO в идентификаторы новых сущностей. Как же я могу это сделать? Предоставляет ли EF механизм для этого?
С одной сущностью я бы сделал это:
public void InsertMyDto(MyDto a_dto)
{
var newEntity = new MyEntity
{
Name = a_dto.Name,
Type = a_dto.Type.ToString(),
Price = a_dto.Price
};
_dataContext.MyEntities.AddObject(newEntity);
_dataContext.SaveChanges();
a_dto.ID = newEntity.ID;
}
Это отлично работает, но что мне делать в этом случае?
public void InsertMyDtos(IEnumerable<MyDto> a_dtos)
{
foreach (var myDto in a_dtos)
{
var newEntity = new MyEntity
{
Name = myDto.Name,
Type = myDto.Type.ToString(),
Price = myDto.Price
};
// Does some validation logic against the database that might fail.
_dataContext.MyEntities.AddObject(newEntity);
}
_dataContext.SaveChanges();
// ???
}
Я хочу сохранить все сразу, потому что у меня есть работа по проверке (не показана выше), которая выполняется с базой данных и происходит сбой до того, как она достигает SaveChanges
, и если она не выполняется, я хочу, чтобы она провалилась как целая транзакция (т.е. откат).