#c# #asp.net-core
#c# #asp.net-core
Вопрос:
Я получаю эту ошибку. У меня нет этой базы данных aspnet-xxx. моя строка подключения:
"Connection": "server=LIMBUWAN\SANJOKSQL;database=TravelMateDB;Trusted_Connection=true;"
Я также ввел свой логин пользователя «Ошибка входа в систему для пользователя «LIMBUWAN sanli».» разрешение dbowner в SSMS.
Из вывода:
в Microsoft.Data.SqlClient.SqlConnection.Откройте () в Microsoft.EntityFrameworkCore.SQLServer.Хранение.Internal.SqlServerConnection.OpenDbConnection (ожидаются логические ошибки) в Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal (ожидаются логические ошибки) в Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Открыть (ожидаются логические ошибки) в Microsoft.EntityFrameworkCore.Storage.Команда отношения.ExecuteReader(relationcommandparameterobject parameterObject) в Microsoft.EntityFrameworkCore.Query.Внутренний.Операция 1.Enumerator.InitializeReader(DbContext _, Boolean result) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func
SingleQueryingEnumerable 3, функция 3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable
1.Перечислитель.MoveNext() ClientConnectionId: adda3d11-f81a-42cc-bacb-baf34690c993 Номер ошибки: 4060, Состояние: 1, Класс: 11 Исключение: «Microsoft.Data.SqlClient.SQLException» в Microsoft.EntityFrameworkCore.Relational.dll В Microsoft произошло исключение типа «Microsoft.Data.SqlClient.SQLException».EntityFrameworkCore.Relational.dll, которая не была обработана в коде пользователя, не может открыть базу данных «aspnet-53bc9b9d-9d6a-45d4-8429-2a2761773502», запрошенную логином. Не удалось войти в систему. Не удалось войти в систему для пользователя «LIMBUWAN sanli».
Ошибка с выбросом кода.
[AllowAnonymous]
public class IndexModel : PageModel
{
private readonly AppDbContext _context;
public List<SelectListItem> Country { get; set; }
public IndexModel(AppDbContext context)
{
_context = context;
}
public void OnGet()
{
Country = GetCountry();
}
public List<SelectListItem> GetCountry()
{
var Country = _context.CoronaListCountries.ToList();
List<SelectListItem> _Country = new List<SelectListItem>();
foreach (var country in Country)
{
_Country.Add(new SelectListItem { Value = country.Id.ToString(), Text = country.Country });
}
return _Country;
}
public JsonResult OnGetGlobalChartData()
{
var globalData = _context.GlobalContexts.ToList();
return new JsonResult(globalData);
}
public JsonResult OnGetSearch(int id)
{
var selectedCountry = _context.CoronaListCountries.Where(S => S.Id == id).ToList();
return new JsonResult(selectedCountry);
}
}
}
Мой контекстный код
public class AppDbContext : IdentityDbContext<ApplicationUser>
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
public DbSet<CoronaListCountryContext> CoronaListCountries { get; set; }
public DbSet<GlobalCasesContext> GlobalContexts { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<CoronaListCountryContext>().HasIndex(U => U.Country).IsUnique();
}
}
Комментарии:
1. Опубликуйте фактический код, который выдает. Вы уверены, что используете эту строку подключения, а не какую-либо другую, жестко запрограммированную? Возможно, вы настроили тестовое соединение? Также опубликуйте полный текст исключения, а не только первую часть сообщения
2. Привет @PanagiotisKanavos Я добавил изображение и вывод. Надеюсь, этого достаточно. У меня есть только одна строка подключения.
3. Опубликуйте код , а не изображение кода. Изображения нельзя копировать, компилировать или искать в Google. Поскольку вы используете ядро EF, вам также необходимо опубликовать конфигурацию контекста, в частности ту часть, в которой вы настраиваете соединение. Так или иначе, вы получите неправильную строку подключения.
4. Вы уверены ? Вы не опубликовали код, который фактически настраивает строку подключения и регистрирует DbContext — вызов
Startup..cs
AddDbContext . Откуда он загружает строку подключения? Поставьте там точку останова и проверьте, какова реальная строка подключения. Если вы использовали однострочную строку для настройки, ie.UseSqlServer(Configuration.GetConnectionString("..."))
извлеките строку подключения в переменную и проверьте ее. Это не то, что вы думаете5. @thesystem Да, я сделал. Я думаю, что тогда для меня проблемой была неправильная конфигурация БД при публикации. Я думаю, что я решил это, используя правильную базу данных в параметрах публикации Windows. Надеюсь, это имеет смысл.
Ответ №1:
Если не удается установить доверенное соединение. Попробуйте использовать стандарт, в котором вы указываете пользователя и пароль
Server=myServerNamemyInstanceName;Database=myDataBase;User Id=myUsername;Password=myPassword;
Комментарии:
1. Стандартный способ — использовать учетную запись Windows, а не логины SQL. Изменение типа аутентификации также не исправит попытку подключения к неверной базе данных
2. Эта строка подключения может использоваться только для входа в систему SQL, а не для учетных записей Windows. В этом случае соединение устанавливается с локальным сервером с использованием локальной учетной записи, поэтому проверка подлинности Windows будет работать до тех пор, пока база данных верна и у пользователя есть разрешения