2017-01-25 10 views
0

Я использую шаблон UnitOfWork для абстрактного доступа к базе данных в моем приложении Asp.Net. В основном я следую за образец подход UnitOfWork описано здесь:Как получить идентификатор из Add с помощью шаблона UnitOfWork?

https://chsakell.com/2015/02/15/asp-net-mvc-solution-architecture-best-practices/

Однако, я изо всех сил, чтобы понять, как я буду получать идентификатор вновь добавленного элемента. Например, если я хочу добавить нового клиента в репозиторий клиентов, как я получу идентификатор клиента? Проблема в том, что Add и Commit развязаны, и Id неизвестен до завершения Commit.

Есть ли способ получить идентификатор добавленного элемента, используя шаблон UnitOfWork?

+1

Большой вопрос: зачем вам этот идентификатор? Я не читал ссылку, но это пахнет архитектурой, которая не позволяет совершать полные графические объекты в одной транзакции. –

+0

Мне нужно сохранить идентификатор в файле cookie. – brinch

ответ

0

Я не думаю, что есть способ сделать это, если вы не нарушаете шаблон и не передаете дополнительную информацию о вновь созданной сущности.

Поскольку идентификатор будет выделен только после фиксации, и если у вас нет информации о том, какие объекты были созданы/обновлены/удалены, его почти невозможно узнать.

я когда-то сделал это, используя приведенный ниже код (я не рекомендую, хотя, но я использую его для этого нужен специально)

public string Insert(Person entity) 
{ 
    uow.Repository.Add(entity); //public Repository object in unit of work which might be wrong 
    Response responseObject = uow.Save(); 
    string id = entity.Id; //gives the newly generated Id 
    return id; 
} 
1

Единица работы должен быть сделкой по всему запросу.

Просто просто верните идентификатор человека из вновь созданного объекта.

В зависимости от того, какие технологии вы используете для доступа к данным это будет отличаться, но если вы используете Entity Framework, вы можете сделать следующее:

var person = DbContext.Set<Person>().Create(); 

// Do your property assignment here 

DbContext.Set<Person>().Add(person); 

return person.Id; 

Создавая экземпляр Person таким образом, вы получаете отслеживаемый экземпляр, который позволяет выполнять ленивую загрузку и использовать свойство Id, поскольку он будет обновляться при вызове SaveChanges (заканчивая свою единицу работы).

 Смежные вопросы

  • Нет связанных вопросов^_^