Должно ли хранилище вызывать другое хранилище? Или хранилище должно вызывать сервисный уровень?
Я пытаюсь понять, как решить эту проблему. Я должен вставить некоторые данные в 2 таблицы, назовем их Таблица A и Таблица B.
Table A has these columns
AId
A1
A2
A3
Table B has
AId
A1
B2
B3
B4
Теперь мой первый вопрос: должен ли другой репозиторий вызывать другой репозиторий? Я неНе думаю, что это решит мою текущую проблему, но я просто хочу знать это для дальнейшего использования?
Теперь о моей проблеме.
когда я вызываю create в моем слое хранилища (TableARepository) для Create Table A. Я сразу же создаю поля для tableB.
// 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();
Так что я думаю, что это нормально, и я неНе думаю, что мне нужно будет вызывать хранилище myBTable (для создания tableB) для этого или сервисного уровня.
Теперь вот проблема. Таблица TableB должна иметь информацию, вставленную в эту таблицу только в том случае, если она не равна "Привет".
so param1 != "hi" // insert
param1 == "hi" // ignore and only insert table A
так что это будет означать, что мне придется обернуть мой TableB, как это
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();
}
Теперь я не уверен, стоит ли мне делать это здесь, так как это выглядит почти как бизнес-логика. но в то же время я не уверен, как сделать эту бизнес-логику, так как в любом случае мне все еще нужно передать значение, чтобы вставить его в метод create, даже если он имеет значение null (A1 - обнуляемое поле).
Поэтому я должен вызвать сервисный уровень tableB, передать TableA.Id, A1 и проверить, что такое A1. Если хорошо, то перейдите в хранилище TableB и вставьте его таким образом?
Итак, TableARepostiory -> Уровень сервиса TableB -> TableBRepository (если найдено, что это значение! = "Привет").
Поэтому я не уверен, что делать.