Devo utilizzare lo schema Unità di lavoro con una relazione molti a molti?

0

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();
        }
    
posta w0051977 17.07.2017 - 17:22
fonte

1 risposta

1

Secondo Microsoft , DBContext.SaveChanges implementa già un'unità di lavoro. Lo fa avvolgendo l'intera operazione in una transazione di database.

Ulteriori letture
Entity Framework Operazioni con le transazioni

    
risposta data 18.07.2017 - 20:54
fonte

Leggi altre domande sui tag