Il contesto viene utilizzato in modalità Primo codice con codice generato da un file EDMX per lo sviluppo Database First o Model First

Sto cercando di migrare un progetto inizialmente sviluppato utilizzando EF4 in EF6, per sfruttare la gestione delle transazioni EF6.

Il problema che sto affrontando è che il progetto è stato creato usando l’approccio Database First, quindi quando sto usando un codice come context.Database.UseTransaction , sto riscontrando il seguente errore:

 The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development. 

Questa eccezione si triggers nel metodo OnModelCreating della mia class DbContext .

Qualche idea ?

Grazie

MODIFICARE:

Il fatto è che è un codice legacy che usa EDMX con il primo approccio al database. Devo implementare le transazioni EF6 all’interno di questo progetto, quindi dovrebbe essere più simile a un primo esempio di codice.

Inoltre, ecco la class di contesto:

 public class MyContext : BaseDbContext { public MyContext (DbConnection existingConnection, bool contextOwnsConnection) : base(existingConnection, contextOwnsConnection) { } } 

E la stringa di connessione:

   

Ho provato a impostare il providerName su System.Data.SqlClient ma non cambia nulla.

Si prega di notare che la stringa di connessione originale era nel primo formato del database:

  

Se provo ad aprire una connessione mentre mantengo la stringa di connessione nel primo formato del database, sto affrontando i Keyword metadata not supported eccezione Keyword metadata not supported , e quando inserisco la stringa di connessione sul primo formato del codice, sto affrontando l’errore The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development.

L’errore più comune durante la conversione del contesto da database-primo a codice prima è dimenticare di rimuovere OnModelCreating generato. In un contesto database-first, OnModelCreating genera l’eccezione:

 protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); // ← throws exception } 

Quindi dai un’occhiata al tuo contesto o alla sua class base (e alle sue classi parziali) e se è come sopra il codice, dovresti rimuoverlo.

Anche il tuo codice e le configurazioni richiedono alcune modifiche.

Stai usando providerName="System.Data.EntityClient" per un primo contesto di codice. Dovresti cambiare la stringa di connessione con qualcosa del genere:

  

Quindi dovresti cambiare il tuo costruttore di contesto in qualcosa del genere:

 public partial class MyContext: DbContext { public MyContext() : base("name=MyContext") { /* . . .*/ } // . . . } 

Inoltre, se si desidera avere una class base comune, seguire le istruzioni di cui sopra.

Nota: per creare codice prima da un database esistente, fare clic con il tasto destro del mouse sul progetto e scegliere Aggiungi nuovo elemento , quindi in Visual C # in Dati selezionare ADO.NET Entity Data Model e fare clic su Aggiungi . Quindi, dalla Creazione guidata modello dati quadro, selezionare Codice prima dal database e seguire la procedura guidata. Per ulteriori informazioni, consultare prima il codice di Entity Framework in un database esistente

Devi solo copiare la stringa di connessione da App.config e incollarla nel tuo file Web.config.

Assicurati che EDMX sia aggiornato all’ultima connessione con il database.

Questo funziona per me.

Mi limito a colbind la stringa in web.config in questo modo

connectionString = “metadata = res: // /Models.wimEntities.csdl|res:// /Models.wimEntities.ssdl|res://*/Models.wimEntities.msl;provider=System.Data.SqlClient;provider connection string = “origine dati = .; initial catalog = DATABASE; persist security info = True; MultipleActiveResultSets = True; App = EntityFramework” “providerName =” System.Data.EntityClient ”