EF Core пытается получить доступ к неправильной базе данных, которая никогда не добавлялась в проектC#

Место общения программистов C#
Ответить
Anonymous
 EF Core пытается получить доступ к неправильной базе данных, которая никогда не добавлялась в проект

Сообщение Anonymous »

У меня возникла довольно странная ошибка. Я выполняю некоторые действия в своем контроллере, и когда я запускаю одно из них с помощью AJAX, я получаю следующую ошибку:

Код: Выделить всё

fail: Microsoft.EntityFrameworkCore.Update[10000]
An exception occurred in the database while saving changes for context type 'App_Escaner.Data.DatabaseContext'.
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
---> Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'Saadis_Internet..COMPROB'.
Кажется, он пытается ссылаться на Saadis_internet, но я НИКОГДА не добавлял ссылку на эту базу данных, только на Saadis. В Saadis и Saadis_internet есть несколько таблиц.
Я попробовал запустить SQL-запрос напрямую со строкой подключения, чтобы проверить, работает ли он, и он сделал вот так:

Код: Выделить всё

using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var command = new SqlCommand("SELECT TOP 10 * FROM COMPROB", connection);
var reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader[0].ToString());
}
}
Я пробовал: удалять и переустанавливать пакеты nuget, проверять строку подключения, удалять миграции, очищать и пересобирать проект (после каждого из предыдущих шагов), удалять кеш базы данных SQL, но ничего не получалось. .
Я попробовал продублировать проект, а в дублированном переопределить все модели и контекст с помощью команды scaffold со строкой подключения (той самой, которую я тестировал непосредственно перед этим)
И ничего не получилось, у меня всё равно получить эту ошибку. Базы данных Saadis_internet больше нет на моем экземпляре SQL Server, у меня есть только база данных Saadis.
Вот код действия, которое я тестирую:

Код: Выделить всё

[HttpPost]
public async Task DeleteCbtFromHr(string cbt, string hr)
{
if (string.IsNullOrEmpty(cbt)) return BadRequest("Comprobante no valido.");

var fCbt = new GetFormattedCbt().FormatCbt(cbt);

try
{
var comp = await context.Comprobs
.Where(x =>
x.CbtNrocbt == fCbt["nroCbt"] &&
x.CbtCenemi == fCbt["centEmi"] &&
x.CbtLetcbt == fCbt["letra"] &&
x.CbtNrohru == hr
)
.FirstOrDefaultAsync();

if (comp == null) return BadRequest("El comprobante no existe.");
// Actualizar nrohru, fleter, fleuni y estado del cbt
comp.CbtEstado = "1";
comp.CbtNrohru = "";
comp.CbtFleter = "";
comp.CbtFleuni = "";
// Buscar registro de cbt en COSTCBT
var costcbt = await context.Costcbt
.Where(x =>
x.Cliente == comp.CbtNrocli &&
x.CbtCodcbt == comp.CbtCodcbt &&
x.CbtCenemi == comp.CbtCenemi &&
x.CbtNrocbt == comp.CbtNrocbt &&
x.CbtLetcbt == comp.CbtLetcbt)
.FirstOrDefaultAsync();
// actualizar importe, impcrr, kilos_afo, bultos, val_decla, hranulada, enviado, plrema
if (costcbt != null)
{
costcbt.Importe = 0;
costcbt.CosImpcrr = 0;
costcbt.KilosAfo = 0;
costcbt.Bultos = 0;
costcbt.ValDecla = 0;
costcbt.Hranulada = "A";
costcbt.Plrema = 0;
}
// guardar cambios
await context.SaveChangesAsync(); --> HERE IS WHERE THE ERROR TRIGGERS
// Ejecutar store para generar etapa
await context.Database.ExecuteSqlRawAsync("EXEC [dbo].[spBorrarComprobHR] @CBT_CENEMI, @CBT_NROCBT, @CBT_LETCBT, @CBT_NROCLI, @CBT_CODCBT, @CBT_NROHRU, @OP",
new SqlParameter("@CBT_CENEMI", comp.CbtCenemi),
new SqlParameter("@CBT_NROCBT", comp.CbtNrocbt),
new SqlParameter("@CBT_LETCBT", comp.CbtLetcbt),
new SqlParameter("@CBT_NROCLI", comp.CbtNrocli),
new SqlParameter("@CBT_CODCBT", comp.CbtCodcbt),
new SqlParameter("@CBT_NROHRU", comp.CbtNrohru),
new SqlParameter("@OP", HttpContext.Session.GetString("Operador"))
);
// devolver vista
return PartialView("_CbtDeleteResult");
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
А это строка подключения:

Код: Выделить всё

"default": "Server=localhost\\SQLDEV; Database=Saadis; Integrated Security=False;user=*;pwd=*; TrustServerCertificate=True;"
Как я уже упоминал ранее, нигде в проекте нет ни одной строки кода, ссылающейся на Saadis_internet. При необходимости я могу скопировать код контекста, но он довольно большой.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... to-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»