11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Giuseppe,
cerchiamo di procedere a piccoli passi altrimenti non capisco più nulla perché qui i problemi continuano ad accumularsi. Le migrations per il momento lasciamole da parte.

Per il momento cerchiamo solo di creare il database con tutte le sue tabelle.

giuseppe500 ha scritto:

ho inserito un server da visual studio con il suo nome e testato la connessione, riuscita

Benissimo, hai creato un database a mano e poi hai verificato che la connection string ti permette di collegarti correttamente.

Vai quindi ad usarla nella tua applicazione. Nel file .config metti questo (ovviamente sostituisci i puntini di sospensione con la connection string che hai testato).
<connectionStrings>
  <add name="DbIfc" connectionString="..." provider="System.Data.SqlClient" />
</connectionStrings>


Per favore, elimina anche questo costruttore del tuo dbcontext DbIfc.
public DbIfc():base("EFDbContext") { }

In questo modo il dbcontext andrà a cercare nel file config una connection string omonima e la troverà dato che l'hai appena aggiunta.

A questo punto, anziché mandare in esecuzione il codice della tua applicazione che importa gli xml, fai semplicemente questo.
Database.SetInitializer<DbIfc>(null);
using (var ctx = new DbIfc())
{
    var ddl = ((IObjectContextAdapter)ctx).ObjectContext.CreateDatabaseScript();
    File.WriteAllText(@"C:\cartella\tuofile.sql", ddl);
}

Al posto di C:\cartella\tuofile.sql tu ovviamente indica un percorso valido ad un file su cui l'applicazione possa scrivere.
All'interno di quel file troverai il DDL, ovvero lo script di creazione del database.

Vai in Visual Studio o in Sql Server Management Studio e lancia questo script per ricreare tutte le tabelle nel db che avevi creato prima.

Te lo faccio fare da Visual Studio o da SSMS perché non sono sicuro che la tua connection string ti consenta di accedere con sufficienti privilegi per creare un db e tutti i suoi oggetti.
Inoltre, in questo modo, riesci a determinare quanto tempo richiede questa fase.

A creazione completata, il tuo dbcontext non avrà la necessità di ricreare il database e quindi potrai procedere con l'importazione delle entità.

ciao,
Moreno

EDIT: Aggiunto Database.SetInitializer<MyContext>(null); altrimenti il contesto prova a creare il db lo stesso, invece vogliamo solo ottenere lo script ddl.
Modificato da BrightSoul il 03 gennaio 2016 14.20 -

Enjoy learning and just keep making
442 messaggi dal 09 marzo 2006
grazie , ho fatto tutto ma mi da quest errore
An unhandled exception of type 'System.TypeInitializationException' occurred in EntityFramework.dll

Additional information: L'inizializzatore di tipo di 'System.Data.Entity.Internal.AppConfig' ha generato un'eccezione


qui
Database.SetInitializer<MyClasses.DbIfc>(null);
11.886 messaggi dal 09 febbraio 2002
Contributi
Puoi postare il contenuto del tuo app.config?

Enjoy learning and just keep making
442 messaggi dal 09 marzo 2006
adesso sta lavorando ho modificato l'app.config cosi:
<configuration>
  <appSettings />
  <connectionStrings>
    <add name="DbIfc" connectionString="Initial Catalog=ITS;Data Source=LENOVO-PC\SQLEXPRESS;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

ma sembra che ci metta molto tempo.
grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Sei riuscito poi a generare il ddl?

Enjoy learning and just keep making
442 messaggi dal 09 marzo 2006
si, ha finito poco fa solo che l'xsd ha un tipo base che accetta una collezione di tipo entity che possono essere piu di 1000 tipi quindi ef mi crea una tabella di 1500 campi che chiaramente non si puo creare era per quello che probabilmente non andava la creazione automatica all aggiunta di un entity.
adesso non so veramnete come fare forse l'xsd non era pensato per i db.
ti allego l'sql se vedi una qualche soluzione
http://gf.etadue.net/tuofile.sql
442 messaggi dal 09 marzo 2006
forse come mi avevi consigliato è meglio creare molti context inoltre moltissime entità non le usero mai, il problema è che se servivano ce le avevo.
e poi questa scelta dell xsd di avere un entità con una lista items di tutte le entità presenti nell xsd mi lascia un po stupito.
ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
ho visto il file sql che EF ti ha generato.
Chi ha progettato la struttura dell'xml ha voluto appiattire il grafo e quindi ti trovi con una quantità incredibile di campi che si adattano male ad essere usate sia col modello relazionale che col modello ad oggetti.

Alla luce di questo, dividere le entità in più contesti potrebbe essere fattibile ma sarà necessario un lavoro di mapping manuale perché non puoi comunque trovarti con una serie di campi chiamati PredefinedType1..84. Questi campi lasciano intendere una relazione uno-a-molti che esiste tra due entità, e andrebbe mappata come tale.

Se non vuoi intraprendere questo lavoro di mapping (e lo capisco perché non sarà immediato) potresti inserire i nodi XML delle entità tali e quali in colonne di tipo XML in Sql Server (rinunciando ad Entity Framework, ovviamente).
https://msdn.microsoft.com/en-us/library/hh403385.aspx

Oppure puoi usare un database schemaless che abbia un buon provider LINQ, in modo che tu mantenga la libertà di interrogarlo con query LINQ.

ciao,
Moreno
Modificato da BrightSoul il 05 gennaio 2016 08.41 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.