У меня есть объект текущего сценария (тест NUnit), у которого есть результат, заголовок, теги ...; Каждый сценарий ios в списке сценариев ios Я хочу добавить его в реляционную базу данных mysql в специальной c таблице:
Test table -> Id, Name(scenario.Title), CreationDate
Tags table -> Id, Name(scenario.Tags)
Step table -> Id, Name(scenario.Steps)
TestStep table -> Id, TestId,StepId
TestTags table -> TestId, TagId........and so on
объект_сценария
Сейчас у меня текущая реализация:
public Test AddTest(Scenario Scenario, Fixture Fixture) {
var test_scenario = StContext.Tests.AsEnumerable().SingleOrDefault(Test = >Test.Title == Scenario.Title);
if (test_scenario != null) {
return test_scenario;
}
test_scenario = new Test {
Id = SequentialGuidGenerator.NewSequentialGuid(SequentialGuidTypeEnum.SequentialAsBinary),
CreationDate = DateTime.UtcNow,
Title = Scenario.Title,
FixtureId = Fixture.Id
};
return StContext.Tests.Add(test_scenario);
}
public void AddStep(List < TestStack.BDDfy.Step > Steps, UnitOfWork UnitOfWork) {
foreach(var step in Steps) {
var single_step = new Step();
if (StContext.Steps.Any(M = >M.Name == step.Title)) continue;
single_step.Id = SequentialGuidGenerator.NewSequentialGuid(SequentialGuidTypeEnum.SequentialAsBinary);
single_step.Name = step.Title;
StContext.Steps.Add(single_step);
}
UnitOfWork.SaveChanges();
}
public void AddTestSteps(Test TestData, IEnumerable < Step > StepData, IEnumerable < StepCategory > StepModifiers, int StepIndex) {
var step_id = StepData.First().Id;
var test_step = StContext.TestSteps.FirstOrDefault(Step = >Step.StepId == step_id);
if (test_step != null) {
return;
}
test_step = new TestSteps {
Id = SequentialGuidGenerator.NewSequentialGuid(SequentialGuidTypeEnum.SequentialAsBinary),
TestId = TestData.Id,
StepId = StepData.FirstOrDefault().Id,
StepModifierId = StepModifiers.FirstOrDefault().Id,
Order = StepIndex
};
StContext.TestSteps.Add(test_step);
}
И код клиента:
foreach(var scenario in item.Scenarios) {
var test_data = UnitOfWork.Tests.AddTest(scenario, fixture_data);
var step_data = UnitOfWork.Steps.AddStep(scenario.Steps, UnitOfWork);
UnitOfWork.TestSteps.AddTestSteps(test_data, step_data, step_modifiers, step_index);
UnitOfWork.Tags.AddTags(scenario.Tags, UnitOfWork);
var tags_data = UnitOfWork.Tags.GetAll().Where(c = >test.Tags.Contains(c.Name));
UnitOfWork.TestTags.AddTestTags(test_data, scenario.Tags, tags_data, UnitOfWork);
}
Вопрос: 1. Есть ли способ лучше добавления всех данных из объекта сценария в каждую отдельную таблицу спецификаторов c? может быть прямо в foreach l oop вместо добавления отдельных методов? 2. Есть ли лучший способ передать данные из одной таблицы в две другие вместо того, чтобы сохранять их в переменной var test_data = UnitOfWork.Tests.AddTest(scenario, fixture_data);
и затем передавать их следующему методу.