Введение

Мы можем столкнуться с моментом, когда нам нужны данные таблиц как объекты, которые будут использоваться в коде для многократного дискретного использования.

Варианты использования приведены ниже:

  1. Нам нужны эти объекты при заполнении базы данных, где мы перечисляем объекты C# в коде и заставляем их вставлять или обновлять во время запуска приложения.
/// <summary>
/// Intializes the Data
/// </summary>
/// <param name="services"></param>
public async Task Initialize(IServiceProvider services)
{
 using (var dbContext = services.GetService<ApplicationDbContext>())
 {
  if (!dbContext.TestTable.Any())
  {
   await dbContext.TestTable.AddRangeAsync(new List<TestTable>()
   {
    new TestTable() { Id = 1, Field1 = 1, Field2 = "Rossy", Field3 = 90.14 },
    new TestTable() { Id = 2, Field1 = 27, Field2 = "Barnie", Field3 = 2.85 },
    new TestTable() { Id = 3, Field1 = 48, Field2 = "Bunnie", Field3 = 10.16 },
    new TestTable() { Id = 4, Field1 = 50, Field2 = "Rockwell", Field3 = 60.35 },
    new TestTable() { Id = 5, Field1 = 89, Field2 = "Clarey", Field3 = 25.97 },
    new TestTable() { Id = 6, Field1 = 63, Field2 = "Matt", Field3 = 68.73 },
    new TestTable() { Id = 7, Field1 = 77, Field2 = "Amble", Field3 = 25.12 },
    new TestTable() { Id = 8, Field1 = 95, Field2 = "Marti", Field3 = 77.49 },
    new TestTable() { Id = 9, Field1 = 97, Field2 = "linnie", Field3 = 54.03 },
    new TestTable() { Id = 10, Field1 = 99, Field2 = "Briano", Field3 = 27.33 }
   });

   await dbContext.SaveChangesAsync();
  }
 }
}

2. Нам нужны эти объекты в тестовых примерах, где нам нужно организовать некоторые фиктивные данные, которые будут имитированы, прежде чем мы будем действовать для проверки утверждений.

/// <summary>
/// Setups the database mocks.
/// </summary>
private void SetupDatabaseMocks()
{
 databaseContext.Setup(x => x.TestTable).Returns(new List<TestTable>()
 {
  new TestTable() { Id = 1, Field1 = 1, Field2 = "Rossy", Field3 = 90.14 },
  new TestTable() { Id = 2, Field1 = 27, Field2 = "Barnie", Field3 = 2.85 },
  new TestTable() { Id = 3, Field1 = 48, Field2 = "Bunnie", Field3 = 10.16 },
  new TestTable() { Id = 4, Field1 = 50, Field2 = "Rockwell", Field3 = 60.35 },
  new TestTable() { Id = 5, Field1 = 89, Field2 = "Clarey", Field3 = 25.97 },
  new TestTable() { Id = 6, Field1 = 63, Field2 = "Matt", Field3 = 68.73 },
  new TestTable() { Id = 7, Field1 = 77, Field2 = "Amble", Field3 = 25.12 },
  new TestTable() { Id = 8, Field1 = 95, Field2 = "Marti", Field3 = 77.49 },
  new TestTable() { Id = 9, Field1 = 97, Field2 = "linnie", Field3 = 54.03 },
  new TestTable() { Id = 10, Field1 = 99, Field2 = "Briano", Field3 = 27.33 }
 }.CreateDbSetMock().Object);
}

Возможные решения

Мы используем два метода, перечисленных ниже, в зависимости от нашего времени, сложности и опыта.

  1. Вручную записывайте значения рядом с данными, поскольку мы создаем объект со статическими данными для всех записей, которые нам нужны в коде. Этот метод очень утомительный, и у нас также могут возникнуть проблемы, если мы вставим неправильные данные в значения, поскольку мы будем переключаться между экранами SQL и нашим кодом.

2. Если мы знаем о формуле электронных таблиц и у нас есть свободное время, мы можем создать объектный код. Во-первых, нам нужно вставить все нужные данные в электронную таблицу. Теперь мы можем написать формулу для объединения значений ячеек со статическим текстом и отформатировать его как объект C#. Хотя это эффективно, и мы можем легко создавать объекты, этот метод может быть сложным, поскольку нам нужно играть с формулами электронных таблиц. Главный недостаток, который я вижу, это его уникальность. Мы не можем использовать формулу, созданную для других таблиц. Нам нужно создать новую формулу электронной таблицы для каждой таблицы, которая нам нужна.

Что мы можем здесь сделать?

Мы можем использовать сценарий, который я создал и добавил в репозиторий GitHub.

Ссылка: https://github.com/mahadikrahul/sql-scripts#c-object-creator-csharpobjectcreatorsql

CSharpObjectCreator.sql

Я создал этот сценарий, используя системные таблицы, в которых хранятся сведения о таблицах в нашей базе данных. Сначала мы запрашиваем системные таблицы и используем данные для заполнения объектов в нужном нам формате.

Применение

  1. Добавьте имя целевой таблицы в качестве значения переменной @TableName в строке 3.
  2. Добавьте любое желаемое условие в таблицу, по которой вы хотите отфильтровать результат. Однако мы можем оставить его пустым для заполнения всех записей.

  1. Добавьте любое поле в @skipfield, чтобы пропустить заполнение объекта.
  2. Выполните запрос и найдите результат на вкладке сообщений.

Преимущества

Поскольку мы используем системные таблицы, мы можем создавать объекты для всех таблиц в БД и заполнять данные в реальном времени из таблиц.

Профессиональный совет

Если вы хотите изменить форматирование или язык объекта для других языков, вы можете обновить сценарий и выполнить задачу.

Автор

Рахул Махадик начал свой карьерный путь в 2015 году в ИТ-компании. В настоящее время он является руководителем группы полного стека в The One Technologies.