user 3008 Ответов: 0

Обновление-база данных кидал "не удалось загрузить ТМС сценарий.лиц. сценарии.миграций.201606220917003_updatelocalisationforportuguese.в SQL' "


Сначала я добавил миграцию в visual studio, и мой код для вызова миграции таков:

namespace Tms.Entities.Migrations
{
    using Scripts;
    using System;
    using System.Data.Entity.Migrations;

    public partial class UpdateLocalisationForPortuguese : DbMigration
    {
        public override void Up()
        {
            AddColumn("dbo.Language", "LocalisationId", c => c.Guid());
            CreateIndex("dbo.Language", "LocalisationId");
            AddForeignKey("dbo.Language", "LocalisationId", "dbo.Localisation", "LocalisationId");

            var script = ScriptHelper.LoadMigrationScript("201606220917003_UpdateLocalisationForPortuguese.sql");
            Sql(script);
        }
        
        public override void Down()
        {
            DropForeignKey("dbo.Language", "LocalisationId", "dbo.Localisation");
            DropIndex("dbo.Language", new[] { "LocalisationId" });
            DropColumn("dbo.Language", "LocalisationId");
        }
    }
}


где я вызываю sql-скрипт. Я создал sql-скрипт и написал все необходимые запросы.

IF EXISTS (SELECT 1 FROM LANGUAGE WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'aa-ET')
BEGIN
INSERT INTO LOCALISATION VALUES ('1505ba83-a51b-487e-9935-9b1007169136')
INSERT INTO LOCALISEDTEXT VALUES ('1505ba83-a51b-487e-9935-9b1007169136', 'pt-BR', '')
UPDATE LANGUAGE SET LOCALISATIONID = '1505ba83-a51b-487e-9935-9b1007169136' WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'aa-ET'
END

IF EXISTS (SELECT 1 FROM LANGUAGE WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'af-ZA')
BEGIN
INSERT INTO LOCALISATION VALUES ('7774ee36-ff12-438e-8f7c-77f76403b372')
INSERT INTO LOCALISEDTEXT VALUES ('7774ee36-ff12-438e-8f7c-77f76403b372', 'pt-BR', '')
UPDATE LANGUAGE SET LOCALISATIONID = '7774ee36-ff12-438e-8f7c-77f76403b372' WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'af-ZA'
END

IF EXISTS (SELECT 1 FROM LANGUAGE WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'sq-AL')
BEGIN
INSERT INTO LOCALISATION VALUES ('979f748e-cbba-40c6-94cf-469a1b4bb567')
INSERT INTO LOCALISEDTEXT VALUES ('979f748e-cbba-40c6-94cf-469a1b4bb567', 'pt-BR', '')
UPDATE LANGUAGE SET LOCALISATIONID = '979f748e-cbba-40c6-94cf-469a1b4bb567' WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'sq-AL'
END

IF EXISTS (SELECT 1 FROM LANGUAGE WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'am-ET')
BEGIN
INSERT INTO LOCALISATION VALUES ('f420a282-d9c0-4b35-b898-67941f52efc2')
INSERT INTO LOCALISEDTEXT VALUES ('f420a282-d9c0-4b35-b898-67941f52efc2', 'pt-BR', '')
UPDATE LANGUAGE SET LOCALISATIONID = 'f420a282-d9c0-4b35-b898-67941f52efc2' WHERE LOCALISATIONID IS NULL AND CULTURENAME = 'am-ET'
END



Когда вы набираете Update-Database в консоли пакета, он выдает ошибку, которая

Не удалось загрузить скрипт ' Tms. Entities.Скрипты.Migrations. 201606220917003_UpdateLocalisationforportuguese. sql'


В Scripthelper код

public static class ScriptHelper
    {
        public static string LoadIndex(string fileName)
        {
            var manifestResourceName = "Tms.Entities.Scripts.Indexes." + fileName;
            return LoadScript(manifestResourceName);
        }

        public static string LoadProcedure(string fileName)
        {
            var manifestResourceName = "Tms.Entities.Scripts.Procedures." + fileName;
            return LoadScript(manifestResourceName);
        }

        public static string LoadMigrationScript(string fileName)
        {
            var manifestResourceName = "Tms.Entities.Scripts.Migrations." + fileName;
            return LoadScript(manifestResourceName);
        }

        public static string LoadScript(string resourceName)
        {
            try
            {
                using (var scriptStream = typeof(ScriptHelper).Assembly.GetManifestResourceStream(resourceName))
                using (var scriptReader = new StreamReader(scriptStream))
                {
                    string result = scriptReader.ReadToEnd();
                    return result;
                }
            }
            catch(Exception ex)
            {
                throw new Exception(string.Format("Failed to load script '{0}'", resourceName), ex);
            }
        }
    }
}

Кто-нибудь может помочь мне решить эту проблему.

Что я уже пробовал:

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

[no name]

можете ли вы показать мне 201606220917003_UpdateLocalisationforportuguese. sql?

user 3008

Это довольно много с 1316 строками я просто добавлю несколько добавлю несколько строк в то что будет то же самое для другого запроса с другим именем культуры и идентификатором локализации

Richard Deeming

Google ничего не знает об этом ScriptHelper класс, или LoadMigrationScript метод.

Если это пользовательский класс, который вы написали, нажмите кнопку "улучшить вопрос" и добавьте код из этого класса в вопрос.

Если это сторонний компонент, вам нужно будет сказать нам, какой именно.

user 3008

Я включил весь пользовательский класс scripthelper, который мы использовали для вашей ссылки

Richard Deeming

Он выглядит как ваш .sql файл не является встроенным ресурсом или хранится не в той папке.

Попробуйте открыть скомпилированную сборку в таком инструменте, как dotPeek[^] и расширение узла "ресурсы". Существует ли встроенный ресурс с ожидаемым именем?

0 Ответов