Próbuję dowiedzieć się, jak rozwiązać ten problem. Muszę wstawić niektóre dane w tabelach 2 pozwala im Tabela A i B. Tabela zadzwonićCzy repozytorium powinno wywoływać inne repozytorium? Czy repozytorium może wywoływać warstwę usługi?
Table A has these columns
AId<PK>
A1
A2
A3
Table B has
AId<PK>
A1
B2
B3
B4
Teraz moje pierwsze pytanie była inna repozytorium powinien zadzwonić innego repozytorium? Nie sądzę, że rozwiąże to mój obecny problem, ale chcę to wiedzieć na przyszłość?
Teraz na mój problem.
kiedy wywołuję kreację w mojej warstwie repozytorium (TableARepository), aby utworzyć tabelę A. Natychmiast utworzę pola dla tableB też.
// linq to sql.
TableA myATable = new TableA();
dbContext.myATable.A1 = "hi"; // all these values would come from parameters.
dbContext.myATable.A2 = "bye";
dbContext.myATable.A3 = "go";
dbContext.myATable.insertOnSubmit(TableA);
dbContext.SubmitChanges();
TableB myBTable = new TableB();
dbContext.myBTable.AId = myATable.AId;
dbContext.myBTable.A1 = myATable.A1;
dbContext.myBTable.B2 = "2";
dbContext.myBTable.B3 = "3";
dbContext.myBTable.B4 = "4";
dbContext.myATable.insertOnSubmit(TableB);
dbContext.SubmitChanges();
Więc myślę, że to jest w porządku i nie sądzę, że muszę zadzwonić myBTable repozytorium (aby utworzyć tableB) dla tego lub warstwy usług.
Tutaj jest problem. Tabela TabelaB powinna zawierać tylko informacje wstawione do tej tabeli tylko wtedy, gdy nie jest równa "cześć".
so param1 != "hi" // insert
param1 == "hi" // ignore and only insert table A
więc oznaczałoby to, że będę musiał zawinąć moja TableB jak ten
if(param1 != "hi")
{
TableB myBTable = new TableB();
dbContext.myBTable.AId = myATable.AId;
dbContext.myBTable.A1 = myATable.A1;
dbContext.myBTable.B2 = "2";
dbContext.myBTable.B3 = "3";
dbContext.myBTable.B4 = "4";
dbContext.myATable.insertOnSubmit(TableB);
dbContext.SubmitChanges();
}
Teraz nie jestem pewien, czy powinien robić to tutaj, ponieważ to wydaje się prawie jak logiki biznesowej. ale jednocześnie nie jestem pewien, jak wykonać tę logikę biznesową, ponieważ tak czy inaczej nadal muszę przekazywać wartość, aby wstawić ją do metody create, nawet jeśli jest ona null (A1 jest polem zerowym).
Więc powinienem zadzwonić do przekazu warstwy serwisowej tableB w TableA.Id, A1 i sprawdzić czym jest A1. Jeśli dobrze, przejdź do repozytorium TableB i wstaw to w ten sposób?
Tak TableARepostiory -> warstwa serwisowa TableB -> TableBRepository (jeśli znaleziono, że ta wartość! = "Hi").
Więc nie jestem pewien, co robić.
Ja zawsze się nad tym zastanawiałem, ponieważ wszystkie przykłady, które widziałem są tak małe, że wydawały się, że zrobiły repozytorium na stół. Chyba teraz wiem na przyszłość. Sądzę, że będę musiał mieć na razie trochę logiki, ponieważ nie będę rededować wszystkiego, żeby to naprawić. W każdym razie nie teraz. – chobo2