Se l'entità esiste già, è possibile generare un'eccezione o aggiornare i campi dell'entità esistente.
Se si sceglie quest'ultima, il metodo dovrebbe probabilmente essere chiamato qualcosa come AddOrUpdate()
LINQ to SQL esempio
Se sto recupero di un singolo record, userò
public Entity GetEntity(int entityID)
{
return dataContext.Entities.SingleOrDefault(e => e.EntityID = entityID);
}
... E nel metodo di chiamata, controllerò per vedere se ciò che viene restituito è nullo prima di tentare di utilizzare l'entità restituita.
Se sto aggiornando un record, farò recuperare l'entità come mostrato, modificare l'entità, e quindi chiamare un metodo repository UpdateEntity(entityID)
per aggiornare i campi del database.
Se aggiungo un record, è ancora più semplice. Poiché si tratta di una banca dati, e le mie tabelle contengono sempre un campo di identità di tipo int (un numero di auto-assegnabile, essenzialmente), l'aggiunta di un record è l'operazione più semplice di tutti (è sempre un nuovo record):
Public void InsertEntity(Entity entity)
{
dataContext.Entities.InsertOnSubmit(entity);
dataContext.SubmitChanges();
}
Le regole aziendali (gli indirizzi di posta elettronica sono univoci, ad esempio) possono essere gestiti nel repository o in un livello aziendale separato. Se stai cercando il modo più "corretto", penso che la maggior parte delle persone sarebbe d'accordo sul fatto che le regole di business appartengono al proprio livello di business logic.
fonte
2010-05-11 23:45:29
@Alastair Pitts, quindi vuol dire che il controllo di campi univoci fa anche parte del lavoro del repository? –