Как я присваиваю версию Базе данных SQL Server?

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

Вы можете добавить свои настройки ERP в свой файл appSettings.json, например, так:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Erp": {
    "Url": "https://localhost"
  }
}

Чтобы добавить ваши настройки в зависимости, вы должны зарегистрировать их через ConfigureServices, вы также заметите, что CompanyFilter добавляется в IServiceCollection через AddTransient, это позволяет ServiceFilterAttribute разрешить его на более поздней стадии и ввести любые зависимости, которые есть у фильтра.

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    services.Configure(Configuration.GetSection("Erp"));
    services.AddTransient();
}

Чтобы применить фильтр к действию вашего контроллера, используйте ServiceFilterAttribute (Type) `

[HttpGet]
[ServiceFilter(typeof(CompanyFilter))]
public ActionResult> Get()
{
    return new string[] { ViewBag.ERPUrl };
}

В приведенном выше коде вы увидите, что я возвращаю ViewBag.ERPUrl, это потому, что ваш ComapnyFilter переопределил OnActionExecuting, который выполняется до того, как будет вызвано действие, тогда как OnActionExecuted вызывается после того, как ваше действие завершено, и до того, как ответ будет возвращен вызывающей стороне.

Вот как теперь выглядит CompanyFilter, вы заметите, что конструктор теперь принимает IOptions

public class CompanyFilter : ActionFilterAttribute
{
    private readonly ErpSettings erpSettings;
    public CompanyFilter(IOptions erpSettings)
    {
        this.erpSettings= erpSettings.Value;

    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (context.Controller is Controller controller)
            controller.ViewBag.ERPUrl = erpSettings.Url;
    }
}

После всего этого, это ответ

API Response

12
задан widmayer 16 January 2009 в 20:39
поделиться

3 ответа

Мы используем Расширенные свойства, поскольку Вы описали это, и это работает действительно хорошо.

Я думаю, имея таблицу, излишество. Если я хочу отследить различия в своих базах данных, я использую управление исходным кодом и сохраняю все сценарии поколения дб в нем.

Я также использовал некоторые инструменты схемы ER, чтобы помочь мне отслеживать изменения в версиях DB. Это было вне реального приложения, но оно позволило мне быстро видеть то, что изменилось.

Я думаю, что это был CASEStudio или что-то как этот.

6
ответ дан 2 December 2019 в 18:22
поделиться

Я делаю это:

Составьте таблицу схемы:

CREATE TABLE [dbo].[SchemaVersion](
    [Major] [int] NOT NULL,
    [Minor] [int] NOT NULL,
    [Build] [int] NOT NULL,
    [Revision] [int] NOT NULL,
    [Applied] [datetime] NOT NULL,
    [Comment] [text] NULL)

Схема обновления:

INSERT INTO SchemaVersion(Major, Minor, Build, Revision, Applied, Comment)
VALUES (1, 9, 1, 0, getdate(), 'Add Table to track pay status')

Получите схему базы данных Версия:

SELECT TOP 1 Major, Minor, Build from SchemaVersion
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC

Адаптированный от того, что я считал при Кодировании Ужаса

12
ответ дан 2 December 2019 в 18:22
поделиться

Если я понимаю Ваше право вопроса (дифференцирующийся между внутренними версиями базы данных, как номера сборки приложения), у Вас могла быть своего рода таблица SYSVERSION, которая содержала одну строку данных с этой информацией.

Легче запросить.

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

Обновление: Ну, если Вы не можете использовать таблицу для содержания метаданных, затем любая внешняя какая-то информация (Информационный файл на жестком диске?) или расширенные свойства были бы способом пойти.

Мне все еще нравится идея таблицы, хотя :) Вы могли всегда использовать безопасность, чтобы только сделать это доступным через пользовательский сохраненный proc get_ db_version или что-то.

2
ответ дан 2 December 2019 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: