6

Sto usando VS 2013 e SQL Svr 2012 e sto provando con EF per popolare una griglia. Poiché si tratta di un test molto semplice, ho solo una tabella con una chiave e un paio di campi dati. Il processo di creazione del modello sembra funzionare correttamente: mostra come previsto nella vista designer, i file vengono creati in app_code, una cartella bin viene creata con 2 DLL e il file di configurazione viene aggiornato con una stringa di connessione e altre voci.Visual Studio 2013 e Entity Framework

Quando provo a selezionare la "connessione denominata" viene visualizzato l'errore "Impossibile caricare la risorsa metadata specificata" e si parla della ricostruzione del progetto per ottenere gli assembly.

Ho passato ore a leggere gli altri casi come questo e non riesco a capire:

  1. perché questo sta accadendo, quando non era mai un problema con VS 2010

  2. Come posso risolvere la stringa di connessione per puntare alle risorse che desidera. Sono totalmente perso con tutti i consigli tecnici sui nomi di assembly completi - niente di quello che provo funziona.

  3. Come impostare alcuni parametri per forzare le risorse nella posizione corretta? Tutti i consigli che ho letto non sembra mettere in relazione molto bene con VS 2013

ho bisogno di decidere se dovrei disinstallare VS 2013 e utilizzare VS 2012. Attualmente, sto usando CONTRO 2010 con ASP 4.0 e mi piacerebbe passare a ASP 4.5 e in generale tenere il passo con la tecnologia Microsoft. Tuttavia, non ho il livello di abilità per gestire una versione VS che è bacata. Mi sembra che questa esecuzione di EF potrebbe essere dovuta a un bug oa qualche corruzione sul mio computer - sto cercando di capire quale è il caso. Ho installato VS 2013 Express e SQL Svr 2012 su una macchina pulita che non aveva nessuno di questi strumenti in passato.

Mi piacerebbe davvero vedere qualcuno che è molto familiare con Visual Studio tenta di replicare il mio problema, come ci vogliono solo pochi minuti per farlo:

  1. In MS SQL Server, creare una piccola DB con una tabella che ha una chiave primaria e un paio di campi dati e popola con alcuni dati di test - Chiamalo TinyDB con TestTable1.

  2. Utilizzando VS 2013 Express per Web, creare un "Nuovo sito Web" con l'opzione per "Sito Web ASP vuoto" utilizzando VB.

  3. Aggiungere una cartella App_Code ASP contenente un "Modello dati Entity ADO.Net" e lasciare il nome come "Modello".

  4. Generare il modello dal DB e creare una "Nuova connessione" per "TinyDB" e utilizzare Entity Framework 6.0 e quindi selezionare "TestTable1". Nota che lo spazio dei nomi è "TinyDBModel". Facendo clic su "Fine" verranno generati diversi elementi in App_Code, altre cartelle e anche l'aggiornamento di web.config.

  5. Aggiungere un modulo Web denominato default.aspx e trascinarlo su una griglia. In modalità progettazione per la griglia, selezionare "nuova origine dati" e quindi l'opzione "Entità" (nome della nota di EntityDataSource1 che appare in default.aspx). Fare clic su Avanti e sotto "named connection" selezionare "TinyDBEntities" - questo è dove il mio ottiene l'errore "Impossibile caricare la risorsa di metadati specificata".

Si noti che questo esercizio esatto in VS 2010 funziona perfettamente e produce una griglia con i dati corretti visualizzati.

risposta

8

Sfortunatamente, il controllo EntityDataSource non funziona con la versione più recente di Entity Framework, EF6. Speriamo che il controllo ottenga un aggiornamento in una versione di aggiornamento futura di VS o EF, ma per ora non è possibile utilizzare i due insieme.

ci sono un paio di soluzioni/alternative:

  1. goccia di nuovo a EF 5. Per fare ciò, eliminare l'edmx e file .TT dalla cartella App_Code, eliminare le assemblee EF dal Cartella bin e rimuovere i riferimenti a EF da web.config. Quindi ricostruire il sito, aggiungere un nuovo modello di entità ADO.NET e scegliere la versione 5 nella finestra di dialogo Scegli la versione. Quindi eliminare i file .tt dalla cartella App_Code, aprire il diagam EDMX, fare clic con il pulsante destro del mouse su un punto vuoto e sulla strategia di generazione del codice della serie di proprietà su ObjectContext legacy. Quindi ricostruire di nuovo, e dovrebbe funzionare.

  2. Utilizzare Associazione modello. Questa è davvero la soluzione raccomandata. Il team Microsoft/EF consiglia alle persone di stare lontano dal controllo EntityDataSource e di utilizzarlo solo per i siti Web di dati dinamici, Model Binding è la soluzione preferita. È abbastanza pulito e semplice da usare e ti dà un grande controllo sulle tue query e sugli aggiornamenti degli oggetti. Per ulteriori informazioni sul modello Binding, check out: http://www.asp.net/web-forms/tutorials/data-access/model-binding/retrieving-data

+1

Hi Imar, Il tuo primo suggerimento funziona perfettamente e io perseguo il Modello Binding Tutorial nel secondo suggerimento - grazie mille! Devo notare che i passaggi devono essere seguiti nell'ordine esatto fornito (eliminare .tt prima di modificare la proprietà EDMX). Inoltre, l'aggiornamento EF automatico del file di configurazione richiede un cut-paste per riportare ConfigSections all'inizio del file, almeno nel mio piccolo test. La tua soluzione dettagliata insieme al tuo approfondimento sul problema più ampio è più apprezzata! –