Vedi il DDL qui sotto:
create table Person (ID identity not null, varchar(name), Gender char(1), dateofbirth datetime, primary key (id))
create table PersonOffer (PersonID int not null references Person(ID), OfferID int not null references Offer(ID))
create table Offer (ID identity int not null, description varchar(20), primary key(id))
C'è una relazione molti a molti tra Persona e Offerta. PersonOffer è la tabella di giunzione.
La classe Person contiene un elenco di offerte perché ci sono veri invarianti tra la classe Person e la classe offerta, ad es. se il sesso o la data di nascita cambiano, allora l'eleggibilità per le offerte cambia.
Sto cercando di decidere se utilizzare lo schema di UnitOfWork qui. Poiché esiste una sola radice aggregata (Persona), la loro dovrebbe essere una respoistory (PersonRepository). Quindi non credo di aver bisogno di usare il pattern di UnitOfWork.
Q1) La persistenza di PersonOffer dovrebbe essere eseguita nel PersonRepository? Qualcosa del genere:
foreach (offerta var in Person.Offers) db.dbOffers.Attach (offerta);
Q2) Ho bisogno di un'unità di lavoro qui?
Il codice nel repository crea una nuova persona con un elenco di offerte come mostrato di seguito:
public int Create(Application businessApplication)
{
dbApplication dataApplication = Mapper.Map<Application, dbApplication>(businessApplication);
foreach (var offer in dataApplication.dbOffers)
db.dbOffers.Attach(offer);
db.dbApplications.Add(dataApplication);
return db.SaveChanges();
}