Создание арендатора ABP не удается - PullRequest
0 голосов
/ 09 марта 2019

Я оцениваю ABP 3.9 в настоящее время, и создание арендатора не работает.
Ошибка при выполнении этого кода:

CheckErrors(await _roleManager.CreateStaticRoles(tenant.Id));

Это исключение, которое я получаю:

Mvc.ExceptionHandling.AbpExceptionFilter - Format of the initialization string does not conform to specification starting at index 0.
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
   at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
   at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)
   at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
   at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
   at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
   at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection()

То же соединение Entity Framework работает с другими ApplicationService классами, которые я добавил. Не знаю, почему только для создания арендатора это не удается. Я расширяю образец шаблона, который доступен бесплатно на сайте ASP.NET Boilerplate.

Большое спасибо за помощь. С Уважением, Zainu

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

До развертывания кода в Azure я не осознавал, что в результате возникнет исключение «System.ApplicationException: не удалось найти корневую папку содержимого».

К счастью для меня, что было обсуждениездесь то же самое https://github.com/aspnetboilerplate/aspnetboilerplate-templates/issues/43 и исправление было таким же

var startupPath = System.IO.Directory.GetCurrentDirectory ();var configuration = AppConfigurations.Get (startupPath);tenant.ConnectionString = SimpleStringCipher.Instance.Encrypt (configuration.GetConnectionString (OneCloudConsts.ConnectionStringName));

0 голосов
/ 10 марта 2019

В классе TenantAppService в методе Create закомментирован код, который создал зашифрованную строку соединения из входного DTO. Добавлен способ считывания строки подключения из конфигурации, и это сработало в моем случае, поскольку у меня есть единая база данных для всех арендаторов. Эта база данных будет очень маленькой и будет хранить только метаданные об арендаторах, тогда как большинство данных приложения будут находиться в хранилище Azure.

    public override async Task<TenantDto> Create(CreateTenantDto input)
    {
        CheckCreatePermission();

        // Create tenant
        var tenant = ObjectMapper.Map<Tenant>(input);
        //this code is commented since we have single database for all tenants
        //tenant.ConnectionString = input.ConnectionString.IsNullOrEmpty()
        //    ? null
        //    : SimpleStringCipher.Instance.Encrypt(input.ConnectionString);

        //This would read connection string from configuration and pass it to 
       //connectionstring property of AbpTenant
        var configuration = 
       AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
        tenant.ConnectionString = SimpleStringCipher.Instance.Encrypt(configuration.GetConnectionString(OneCloudConsts.ConnectionStringName));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...