Domanda

Sto avendo un problema quando si tenta di eseguire il mio progetto ogni volta che si costruisce. Sembra che le piste di inizializzazione, ma quando si tratta della prima query -. Muore con il seguente InvalidOperationException

This operation requires a connection to the 'master' database. Unable to create a
connection to the 'master' database because the original database connection has
been opened and credentials have been removed from the connection string. Supply
an unopened connection.

Per riferimento, sto usando il codice EF primo CTP4, importata direttamente con NuGet. Connessione a uno SQL Server 2008 R2

Quello che voglio che accada è quello di ri-creare il database se ci sono eventuali modifiche del modello e di semi con pochi valori per la tabella di ricerca. Entrambe queste cose sembrano essere supportati * fuori dalla scatola.

La mia configurazione è in questo modo:

Global.asax

 protected void Application_Start()
 {
    Database.SetInitializer<CoreDB>(new CoreDBInitialiser());
    // et al...
 }

CoreDB.cs

public class CoreDB : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Login> Logins { get; set; }
    public DbSet<Permission> Permissions { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<RolePermission> RolePermissions { get; set; }
    public DbSet<UserRole> UserRoles { get; set; }
    public DbSet<Setting> Settings { get; set; }
}

public class CoreDBInitialiser : RecreateDatabaseIfModelChanges<CoreDB>
{
    protected override void Seed(CoreDB context)
    {
        var settings = new List<Setting>
        {
            new Setting
            {
                SettingName = "ExampleSetting",
                SettingValue = "This is a sample setting value",
            }
        };

        settings.ForEach(d => context.Settings.Add(d));
    }
}

Quando viene eseguito, si muore su una linea simile a questo, che è fondamentalmente la prima query si incontra dopo la creazione del database.

User data = (from u in _data.Users where u.Username == userName  select u).SingleOrDefault();

Le cose che non credo che è:

  • Non è permesso : Ho cancellato il database vero e proprio all'interno di SQL Server. L'applicazione ricrea intorno circa lo stesso tempo come quella query è tentato di eseguire (l'inizializzatore è impostato, poi, ovviamente, tiene fuori creando fino a quando è necessario). Ho anche effettuato l'accesso a SQL Server come l'utente che è specificato nel mio web.config e hanno pieno accesso in lettura / scrittura al database. In realtà, essi probabilmente dovrebbero fare come tale account crea i database anche.
  • viene creato il database :. Eliminazione del DB e ricrea automaticamente multa
  • La stringa di connessione è definito correttamente con l'attributo providerName.

<add name="CoreDB" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=TheDatabase;User Id=TheUsername;Password=ThePassword;" providerName="System.Data.SqlClient" />

  • E non si visualizzato tratta di un problema nel mio codice / logica, come una volta che la query non è riuscita con successo, il codice inizierà correttamente fino alla prossima volta che l'applicazione è ricostruito . E 'ovviamente potrebbe essere, e probabilmente avrei dovuto applicare un giro di lavoro nel mio codice non importa quale in ogni caso. :)

Che fare?

Idealmente, mi piacerebbe "Non pensare lo schema del database" molto. Mi piacerebbe che fosse come sembrava di essere in di Scott Gu eccellente post sul blog (e follow-up per lavorare con i database esistenti ) dove le cose appena elaborato e scomparvero via. Per la maggior parte questo è vero. Sembra essere un problema con la connessione non viene chiusa ad un certo punto, ma non riesco a trovare il modo di correggere questo problema.

Un alcuni forum < messaggi / a> / SO implicano il problema che sto avendo è fondamentalmente perché gli inizializzatori non funzionano esattamente come previsto e la connessione potrebbero essere lasciate aperte. La soluzione in altri luoghi sembra essere semplicemente "non creare il proprio initializer", che non è la soluzione ottimale -. Ma se qualcuno ha qualche idea, io probabilmente hanno a che fare fino CTP5 forse

* sì, lo so che è un CTP, così "sostenuto" probabilmente non è la parola:)

Altri suggerimenti

Come richiesto Vi metto il mio commento come risposta.

La mia soluzione era molto simile a bizon dove il Trusted_Connection e Mantieni informazioni di protezione necessari correzione, ma ho realizzato attraverso le proprietà di Visual Studio andando su:

Esplora server -> Modifica connessione -> Avanzate -> Quindi controllare sia Persist Security Info e < strong> TrustServerCertificate come true, ed è formattato correttamente la stringa di connessione

screenshot di studio di gui visivo ??

Proprio incorrere in questo problema, mentre io seguo questo sotto VS2012 e EF6. La mia soluzione è molto semplice:

Nella finestra di dialogo Proprietà connessione che si apre quando si sceglie "reverse engineering di codice In primo luogo", di controllo "Salva la password".

Problema risolto, ma non so i dettagli su di esso ...

Aggiungi questo alla vostra stringa di connessione. Ha funzionato per me.

Integrated Security=True;Persist Security Info=True;

Non sono riuscito a farlo funzionare come volevo. Questa risposta è un bodge / opt-out, in modo da essere a conoscenza al momento della decisione su cosa fare.

I siano ritornati da Codice-First per intanto fino a quando è in una versione più stabile. Per tutti coloro che sta avendo questo problema con la CTP4 così, allora si può ottenere intorno ad esso da perdere l'inizializzatore e passando NULL nel metodo SetInitializer.

Database.SetInitializer<CoreDB>(null);

Questa di mezzi corso che è necessario mantenere il database ogni volta che si apporta una modifica, o modificarlo per una singola corsa e poi cambiare di nuovo dopo che crea il DB.

Mai pubblicato prima, imparare Entity Framework utilizzando MVC, con 2010 e un server di database dev esegue SQL Server 2005 per il database. Sono principalmente un ragazzo di Windows app.

La prima parte della lezione è andato bene, ha creato le tre tabelle finora, poi ho incontrato l'errore precedente, dopo l'aggiunta di alcuni più classi e lo strucure base di dati necessaria per il cambiamento.

La mia correzione è stata piuttosto brutale, sono andato sul server dev e andò nel mio login e io sono un amministratore di sistema sul mio server, non è sorprendente. Così sono andato in usermapping e maestro selezionato ed appena ha soddisfatto ogni finestra. E 'ora funziona.

Non so perché questo ha funzionato o qual è il problema, ma si spera che qualcuno che ne sa più di me può costruire su questo 'cattivo fix' e renderla migliore per gli altri che hanno questo problema.

ho avuto la password errata. Stranamente formulato eccezioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top