Sdílet prostřednictvím


Připojovací řetězce a modely

Tento článek popisuje, jak Entity Framework zjistí, které databázové připojení se má použít, a jak ho změnit. Probírané modely vytvořené pomocí Code First a EF Designeru.

Upozorňující

Tento článek používá místní databázi, která nevyžaduje ověření uživatele. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování nasazených testovacích a produkčníchaplikacích

Aplikace Entity Framework obvykle používá třídu odvozenou z DbContext. Tato odvozená třída volá jeden z konstruktorů na základní DbContext třídy k řízení:

  • Jak se kontext připojuje k databázi, tj. jak se najde a použije připojovací řetězec.
  • Určuje, jestli kontext vypočítá model pomocí code First, nebo načte model vytvořený pomocí EF Designeru.
  • Další pokročilé možnosti

Následující fragmenty ukazují některé ze způsobů, jak lze použít konstruktory DbContext.

Použití code First s připojením podle konvence

Pokud jste v aplikaci neprokonfigurovali žádnou jinou konfiguraci, volání konstruktoru bez parametrů v DbContext způsobí spuštění DbContext v režimu Code First s připojením k databázi vytvořené konvencí. Příklad:

namespace Demo.EF
{
    public class BloggingContext : DbContext
    {
        public BloggingContext()
        // C# will call base class parameterless constructor by default
        {
        }
    }
}

V tomto příkladu DbContext jako název databáze používá kvalifikovaný název oboru názvů odvozené třídy kontextu Demo.EF.BloggingContext a vytvoří připojovací řetězec pro tuto databázi pomocí SQL Express nebo LocalDB. Pokud jsou obě nainstalované, použije se SQL Express.

Visual Studio 2010 ve výchozím nastavení zahrnuje SQL Express a Visual Studio 2012 a novější zahrnuje LocalDB. Během instalace balíček NuGet EntityFramework kontroluje, který databázový server je k dispozici. Balíček NuGet pak aktualizuje konfigurační soubor nastavením výchozího databázového serveru, který Code First používá při vytváření připojení podle konvence. Pokud je SQL Express spuštěný, použije se. Pokud SQL Express není k dispozici, localDB se místo toho zaregistruje jako výchozí. Pokud už konfigurační soubor obsahuje nastavení pro výchozí objekt pro vytváření připojení, neprovedou se žádné změny.

Použití code First s připojením podle konvence a zadaným názvem databáze

Pokud jste v aplikaci neprokonfigurovali žádnou jinou konfiguraci, volání konstruktoru řetězců v DbContext s názvem databáze, který chcete použít, způsobí spuštění DbContext v režimu Code First s připojením k databázi vytvořené konvencí pro databázi tohoto názvu. Příklad:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("BloggingDatabase")
    {
    }
}

V tomto příkladu DbContext používá "BloggingDatabase" jako název databáze a vytvoří připojovací řetězec pro tuto databázi pomocí SQL Expressu (nainstalovaného se sadou Visual Studio 2010) nebo LocalDB (nainstalované se sadou Visual Studio 2012). Pokud jsou obě nainstalované, použije se SQL Express.

Použití kódu First s připojovací řetězec v souboru app.config/web.config

Můžete se rozhodnout vložit připojovací řetězec do souboru app.config nebo web.config. Příklad:

<configuration>
  <connectionStrings>
    <add name="BloggingCompactDatabase"
         providerName="System.Data.SqlServerCe.4.0"
         connectionString="Data Source=Blogging.sdf"/>
  </connectionStrings>
</configuration>

To je snadný způsob, jak říct DbContext, aby používal databázový server jiný než SQL Express nebo LocalDB – výše uvedený příklad určuje databázi SQL Server Compact Edition.

Pokud se název připojovací řetězec shoduje s názvem vašeho kontextu (s kvalifikací oboru názvů nebo bez něj), dbContext ho najde při použití konstruktoru bez parametrů. Pokud se název připojovací řetězec liší od názvu vašeho kontextu, můžete říct DbContext, aby toto připojení používal v režimu Code First předáním připojovací řetězec názvu do konstruktoru DbContext. Příklad:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("BloggingCompactDatabase")
    {
    }
}

Alternativně můžete použít formulář "name=<připojovací řetězec name>" pro řetězec předaný konstruktoru DbContext. Příklad:

public class BloggingContext : DbContext
{
    public BloggingContext()
        : base("name=BloggingCompactDatabase")
    {
    }
}

Tento formulář explicitně očekává, že se připojovací řetězec najde v konfiguračním souboru. Pokud se nenajde připojovací řetězec s daným názvem, vyvolá se výjimka.

Databáze/Model First s připojovací řetězec v souboru app.config/web.config

Modely vytvořené pomocí EF Designeru se liší od kódu First v tom, že váš model již existuje a při spuštění aplikace se negeneruje z kódu. Model v projektu obvykle existuje jako soubor EDMX.

Návrhář přidá ef připojovací řetězec do souboru app.config nebo web.config. Tato připojovací řetězec je speciální v tom, že obsahuje informace o tom, jak najít informace ve vašem souboru EDMX. Příklad:

<configuration>  
  <connectionStrings>  
    <add name="Northwind_Entities"  
         connectionString="metadata=res://*/Northwind.csdl|  
                                    res://*/Northwind.ssdl|  
                                    res://*/Northwind.msl;  
                           provider=System.Data.SqlClient;  
                           provider connection string=  
                               &quot;Data Source=.\sqlexpress;  
                                     Initial Catalog=Northwind;  
                                     Integrated Security=True;  
                                     MultipleActiveResultSets=True&quot;"  
         providerName="System.Data.EntityClient"/>  
  </connectionStrings>  
</configuration>

Ef Designer také vygeneruje kód, který informuje DbContext, aby toto připojení používal předáním názvu připojovací řetězec do konstruktoru DbContext. Příklad:

public class NorthwindContext : DbContext
{
    public NorthwindContext()
        : base("name=Northwind_Entities")
    {
    }
}

DbContext ví, že načte existující model (místo použití code First k výpočtu z kódu), protože připojovací řetězec je ef připojovací řetězec obsahující podrobnosti o modelu, který se má použít.

Další možnosti konstruktoru DbContext

DbContext třída obsahuje další konstruktory a vzory použití, které umožňují některé pokročilejší scénáře. Tady jsou některé z těchto možností:

  • DbModelBuilder třídy můžete použít k sestavení modelu Code First bez vytvoření instance DbContext instance. Výsledkem je objekt DbModel. Tento objekt DbModel pak můžete předat do jednoho z konstruktorů DbContext, když jste připraveni vytvořit instanci DbContext.
  • Úplný připojovací řetězec můžete předat dbContext, ne jenom databázi nebo název připojovací řetězec. Ve výchozím nastavení se tento připojovací řetězec používá s poskytovatelem System.Data.SqlClient. To lze změnit nastavením jiné implementace IConnectionFactory na kontext. Database.DefaultConnectionFactory.
  • Existující objekt DbConnection můžete použít předáním do konstruktoru DbContext. Pokud je objekt připojení instancí EntityConnection, použije se model zadaný v připojení místo výpočtu modelu pomocí code First. Pokud je objekt instancí jiného typu , například SqlConnection, kontext ho použije pro režim Code First.
  • Existující ObjectContext můžete předat konstruktor DbContext k vytvoření DbContext zabalení existujícího kontextu. To lze použít pro existující aplikace, které používají ObjectContext, ale které chtějí využívat DbContext v některých částech aplikace.