piątek, 30 listopada 2012

EF połączenie do MySql - nieobsługiwane słowa klucozwe

Problem:
Podczas próby pobrania danych przez EF z bazy MySql otrzymuje błąd:






Treść błędu: Keyword not supported: 'port'.

Tak więc problem z nieobsługiwanym elementem Connection String. Jeżeli baza stoi na domyślnym porcie dla niej przeznaczonym, nie ma problemu. Można je bezpiecznie usunąć.
Sprawa się komplikuje jeżeli baza nie stoi na domyślnym porcie, lub też nie możemy go zmienić.

Rozwiązanie:

Aby poradzić sobie z tym problemem, możemy go obejść i dać kontekstowi gotowe połączenie do bazy. Dodajemy konstruktor do naszego kontekstu:

Code:
public DatabaseContext(DbConnection connections, bool contextOwnsConnection)
            : base(connections, contextOwnsConnection)
        {
            
        }

Pierwszy parametr to nasze połączenie, drugi mówi o tym czy połączenie będzie zarządzane przez kontekst. Jeżeli przekażemy wartość true, połączenie zostanie zwolnione podczas zwalniania kontekstu. Jeżeli nie zgodzimy się na zarządzanie połączeniem przez kontekst musimy pamiętać o tym, aby zwolnić je samemu.

Samo stworzenie kontekstu i przekazanie do niego połączenia jest jest rzeczą trywialną:

Code:
            string connectionString = "Server = localhost; Port = 3307; Database = mojabaza; Uid = uzytkownik; Pwd = haslo; Charset=latin1;";
            var mySqlConnection = new MySqlConnection(connectionString);
            using (var context = new DatabaseContext(mySqlConnection, true))
            {
                var projects = context.Tabela.ToList();
            }

Brak komentarzy:

Prześlij komentarz