Если объект уже существует, вы можете либо сгенерировать исключение, либо обновить поля существующего объекта.
Если вы выберете последнее, метод, вероятно, должен называться примерно так: AddOrUpdate()
Пример Linq to SQL
Если я получаю одну запись, я буду использовать
public Entity GetEntity(int entityID)
{
return dataContext.Entities.SingleOrDefault(e => e.EntityID = entityID);
}
... И в вызывающем методе я проверю, является ли возвращенное значение нулевым, прежде чем пытаться использовать возвращенную сущность.
Если я обновляю запись, я извлеку сущность, как показано, отредактирую сущность, а затем вызову метод репозитория UpdateEntity(entityID)
для обновления полей в базе данных.
Если я добавляю запись, это даже проще. Поскольку это база данных, а мои таблицы всегда содержат поле Identity типа int (по сути, автоматически назначаемое число), добавление записи является самой простой операцией из всех (это всегда новая запись):
Public void InsertEntity(Entity entity)
{
dataContext.Entities.InsertOnSubmit(entity);
dataContext.SubmitChanges();
}
Бизнес-правила (например, адреса электронной почты уникальны) могут обрабатываться в хранилище или на отдельном бизнес-уровне. Если вы ищете самый «правильный» путь, я думаю, что большинство людей согласится с тем, что бизнес-правила принадлежат их собственному уровню бизнес-логики.