Golden Basim Ответов: 1

Почему несколько раз эта ошибка происходит "не удалось подключиться к базе данных" с запросом EF?


привет,
несколько раз (5-10%), когда я пытаюсь выполнить запрос EF, появляется эта ошибка :
System.Exception: خطأ عند محاولة ملء مصدر البيانات. تم طرح الاستثناء التالي: 
Failed to connect to the database. To learn more, see the exception details. 

Exception details:
 The default DbConfiguration instance was used by the Entity Framework before an attempt was made to set an instance of 'DbConfiguration'. The 'DbConfiguration' instance must be set at application start before using any Entity Framework features or must be registered in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information. ---> DevExpress.XtraReports.DataRetrievalException: خطأ عند محاولة ملء مصدر البيانات. تم طرح الاستثناء التالي: 
Failed to connect to the database. To learn more, see the exception details. 

Exception details:
 The default DbConfiguration instance was used by the Entity Framework before an attempt was made to set an instance of 'DbConfiguration'. The 'DbConfiguration' instance must be set at application start before using any Entity Framework features or must be registered in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information. ---> DevExpress.DataAccess.EntityFramework.EFConnectionException: Failed to connect to the database. To learn more, see the exception details. 

Exception details:
 The default DbConfiguration instance was used by the Entity Framework before an attempt was made to set an instance of 'DbConfiguration'. The 'DbConfiguration' instance must be set at application start before using any Entity Framework features or must be registered in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information. ---> System.InvalidOperationException: The default DbConfiguration instance was used by the Entity Framework before an attempt was made to set an instance of 'DbConfiguration'. The 'DbConfiguration' instance must be set at application start before using any Entity Framework features or must be registered in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=260883 for more information.


это происходит не с одним запросом, а с разными запросами

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

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

С чего мне начать отслеживание и поиск решения этой проблемы?

Обновление 1

я использую эту функцию для установки пользовательских параметров подключения
public static mrsalesdbEntities OpenConn()
        {
            mrsalesdbEntities MrSalesContext = new mrsalesdbEntities();
            MrSalesContext.Database.CommandTimeout = 999999;
            MrSalesContext.ChangeDatabase
               (
                   initialCatalog: myconn.database,
                   port: Convert.ToUInt32( myconn.port),
                   userId: myconn.uid,
                   password: myconn.password,
                   dataSource: myconn.server
            );
            return MrSalesContext;
        }

mrsalesdbEntities DB1 = ConnectionTools.OpenConn();


Обновление 2

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

public class FE6CodeConfig : DbConfiguration
{
    public FE6CodeConfig()
    {
        SetDefaultConnectionFactory(new LocalDbConnectionFactory(myconn.database,myconn.mrsales_Coonn));
    }
}

//[DbConfigurationType(typeof(FE6CodeConfig))]
[DbConfigurationType("MrSales.MrSModels.FE6CodeConfig, MrSales")]

Golden Basim

я использую эту функцию для установки пользовательских параметров подключения

public static mrsalesdbEntities OpenConn()
        {
            mrsalesdbEntities MrSalesContext = new mrsalesdbEntities();
            MrSalesContext.Database.CommandTimeout = 999999;
            MrSalesContext.ChangeDatabase
               (
                   initialCatalog: myconn.database,
                   port: Convert.ToUInt32( myconn.port),
                   userId: myconn.uid,
                   password: myconn.password,
                   dataSource: myconn.server
            );
            return MrSalesContext;
        }

mrsalesdbEntities DB1 = ConnectionTools.OpenConn();

1 Ответов

Рейтинг:
0

Maciej Los

Существует 2 возможных способа настройки конфигурации EF:
1. Конфигурация на основе кода - EF6 | Microsoft Docs[^]
2. Параметры конфигурационного файла - EF6 | Microsoft Docs[^]

Если вы используете конфигурацию на основе кода, то...

Цитата:
Класс, производный от DbConfiguration, может выглядеть следующим образом:
С#

using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.SqlServer;

namespace MyNamespace
{
    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
            SetDefaultConnectionFactory(new LocalDbConnectionFactory("mssqllocaldb"));
        }
    }
}


Я бы посоветовал прочитать эту статью: Технический блог Джона Шнайдера: исправление: “экземпляр DbConfiguration по умолчанию использовался Entity Framework до того, как был обнаружен тип " ... " в LINQPad[^]


Golden Basim

я обновил свой контекстный файл до

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MrSales.MrSModels
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Data.Entity.Core.Objects;
    using System.Linq;
    using System.Data.Common;


    public partial class mrsalesdbEntities : DbContext
    {
        public mrsalesdbEntities()
            : base("name=mrsalesdbEntities")
        {
        }


        public mrsalesdbEntities(DbConnection existingConnection, bool contextOwnsConnection)
            : base(existingConnection, contextOwnsConnection)
        {
        }


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<account_items> account_items { get; set; }


кроме того, я обновил файл app.config до:

<entityFramework codeConfigurationType="MrSales.MrSModels.mrsalesdbEntities, MrSales.MrSModels">


но эта ошибка появляется :
Тип конфигурации DbConfiguration 'MrSales.MrSModels.mrsalesdbEntities, MrSales.Не удалось загрузить MrSModels, указанные в конфигурационном файле приложения. Убедитесь, что используется полное имя сборки и что сборка доступна для запущенного приложения. Видишь ли http://go.microsoft.com/fwlink/?LinkId=260883 для получения дополнительной информации.