13

Ho bisogno di una stringa di connessione SQL Server 2008 valida per il progetto code-first di Entity Framework 4.1. Io lo uso ora con MVC 3.Stringa di connessione di SQL Server 2008 per il codice entità 4.1 prima del codice

Per ora è ancora molto semplice, solo 1 progetto, 3 semplici classe del modello ...

ho potuto trovare solo tutto il resto, come SQL Express, connessioni CE sulla web ...

Trovarlo per nome in web.config ("ApplicationServices") è OK, perché quando ho provato a utilizzare ho ricevuto errori specifici per questo.

Il meglio che ho potuto ottenere è:

Impossibile caricare la risorsa metadati specificato.

Ho provato a darglielo come metadata=res://MyWebProject/MyWebProject.csdl| ... ma senza successo.

Quindi non crea il database per me, nemmeno il metodo OnModelCreating(DbModelBuilder modelBuilder).

Se provo a utilizzare una connessione "vecchio stile" come quella che ho trovato per SQL Server Express, manca i metadati.

Grazie per il vostro aiuto in anticipo.

risposta

34

L'idea di "Code-First" è che non si dovrebbe avere a che fare con i file .csdl, .ssdl e .msl menzionati nella stringa di connessione. Se non specificato altrove, DbContext cercherà la stringa di connessione nel web.config come descritto. Il costruttore della classe DbContext accetterà una coppia nome-valore che specifica il nome della stringa di connessione nel web.config. Per esempio:

<connectionStrings> 
    <add name="ConnectionName" 
     providerName="System.Data.SqlClient" 
     connectionString="Server=ServerName;Database=DatabaseName;Integrated Security=True;" /> 
</connectionStrings> 

possibile fare riferimento in vostro contesto:

class MyContext : DbContext 
{ 
    public MyContext() : base("name=ConnectionName") { } 
    ... 
} 

Il collegamento-stringa di esempio che ho fornito è in realtà per un database SQL Server. È importante specificare ProviderName, poiché "Code-First" richiede di generare un file .ssdl corrispondente (schema di archiviazione).

+0

Grazie, questo è quello che mi serve. – DavidR

+0

Questa discussione è un risparmiatore di vita. –

+0

Se lo schema del database non esiste e sto utilizzando SQL Server 2008, l'agente creerà automaticamente il database? –

3

Inoltre, è possibile assegnare un nome alla stringa di connessione dopo la classe DbContext. In questo caso è possibile che non menziona il nome della stringa di connessione

class MyContext : DbContext 
{ 
    //public MyContext() : base("name=ConnectionName") { } // not needed 
    ... 
} 

e la stringa di connessione è la folowing

<connectionStrings> 
    <add name="MyContext" 
     providerName="System.Data.SqlClient" 
     connectionString="Server=ServerName;Database=DatabaseName;Integrated Security=True;" /> 
</connectionStrings>