EF 4.1 mit Connectionstring Initialisieren


Ich habe bereits hier gezeigt wie man von EF 4.0 auf EF 4.1 aktualisiert. Dabei hatte ich jedoch das Problem das der neue Konstruktor von EF 4.1 der vom VS angelegt wird nicht mehr mit Hilfe eines Connectionstrings initialisiert werden kann. Dieser sucht automatisch in der App.Config oder Web.Config nach dem Connectionstring mit dem Namen des aktuellen Projekts.

Da es sich hierbei nicht immer um die optimale Lösung handelt und ich damals den Wald vor lauten Bäumen nicht gesehen habe, wie Einfach doch die Lösung ist. Will ich diese euch nicht vorenthalten.

Da es sich bei der Basisklasse des EF DbContext um eine Partielle Klasse handelt die automatisch vom VS angelegt wird und nicht bearbeitet werden sollte:

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

Muss man einfach eine eigene Partielle Klasse mit dem gleichen Namen anlegen und diese mit dem folgenden Konstruktor versehen:

    /// <summary>
    /// Zusätzliche Partielle Klasse, damit weitere Konstruktoren angelegt werden können
    /// um unser EF 4.1 Objekt nicht nur mit Hilfe App.Config initialisieren zu können.
    /// Sondern damit man auch wieder einen Connectionstring übergeben kann.
    /// </summary>
    public partial class EFModelContainer
    {
        public EFModelContainer(string connectionString) : base(connectionString)
        {

        }

    }

Mit diesem neuen Konstruktor kann man jetzt das EF Model auch wieder mit einem Connectionstring initialisieren der z.B. folgendermaßen zusammengebaut werden kann:

    /// <summary>
    /// Gibt den Connectionstring zur DB zurück für das EntityFramework
    /// </summary>
    public static string GetConnectionString()
    {
        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
        //Die Zugangsdaten aus der Web.Config laden, nicht den Connectionstring verwenden.
        sqlBuilder.DataSource = ConfigurationManager.AppSettings["DBDataSource"]; ;
        sqlBuilder.InitialCatalog = ConfigurationManager.AppSettings["DBCatalog"]; ;
        sqlBuilder.UserID = ConfigurationManager.AppSettings["DBUser"];
        sqlBuilder.Password = ConfigurationManager.AppSettings["DBPassword"];
        //Wichtige Option damit mehrere Abfragen geöffnet werden können
        //um Subabfragen ausführen zu können von Untergordneten Projekten
        sqlBuilder.MultipleActiveResultSets = true;
        sqlBuilder.IntegratedSecurity = false;

        //Initialize the EntityConnectionStringBuilder.
        EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();

        //Providernamen setzten
        entityBuilder.Provider = "System.Data.SqlClient";
        //Connectionstring setzten
        entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
        //Metadaten setzten.
        entityBuilder.Metadata = @"res://*/EFModel.csdl|res://*/EFModel.ssdl|res://*/EFModel.msl";
        return entityBuilder.ConnectionString;
    }

Das war es auch schon wieder, ich hoffe ich konnte “Licht ins Dunkel” bringen :-)

Advertisements

2 Gedanken zu „EF 4.1 mit Connectionstring Initialisieren

  1. Pingback: Upgrade Entity Framework (EF) 4.0 auf 4.1 « SquadWuschel's Blog

  2. Pingback: Postgres Datenbank und Entity Framework « SquadWuschel's Blog

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s