2012-10-30 12 views
5

Cosa devo usare come metadati, mentre io sto usando Codice-First approccio via EntityConnectionStringBuilderCodice-First metadati

EntityConnectionStringBuilder entityBuilder; 
entityBuilder.MetaData = ?? // Metadata = @"res://*/;"; 

ho ottenuto questo errore:

{"The specified metadata path is not valid. A valid path must be either an existing directory, an existing file with extension '.csdl', '.ssdl', or '.msl', or a URI that identifies an embedded resource."} 
  • Non ho fatto alcun modello su questo approccio, come pensavo non fosse necessario.

  • Tutto quello che voglio è fare tutto al livello di programmazione.

  • Tutto stava funzionando bene in Primo approccio al database.

  • Qui ho creato la stringa di connessione e l'ho passata al contesto.

  • La versione EF è 5.0.

  • Il database esiste.

  • Dovrei usare qualsiasi altra cosa per evitare MetaData Controllo, come ad esempio inizializzatori o ??

risposta

-2

La risposta è semplicemente questo: Invece dei metadati ciò che è mancato è il Mapping modello e si deve fare qui:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    // The Mapping 
} 
0

è necessario aggiungere i dettagli della stringa di connessione, nonché i percorsi per i file con il modello generato, qui di seguito è un esempio di ciò che si dovrebbe mettere in esso.

string efConnectionString= @"metadata=res://*/Blogging.csdl|res://*/Blogging.ssdl|res://*/Blogging.msl;provider=System.Data.SqlClient;provider connection string=""Data Source=.\SQLEXPRESS;Initial Catalog=Blogging;Integrated Security=True;MultipleActiveResultSets=True"""; 

EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder(connectionString); 

SqlConnectionStringBuilder sbuilder = new SqlConnectionStringBuilder(builder.ProviderConnectionString); 

sbuilder.DataSource = "New Datasource"; 

builder.ProviderConnectionString = sbuilder.ConnectionString; 
efConnectionString = builder.ConnectionString; 
+0

Come ho detto ho fatto questo quando si utilizza Database-First, in code-First Non ho creato alcun modello e, se specificassi questi nomi, avrò un'altra causa di errore di modelli non esistenti! – LastBye

4

Per CodeFirst si utilizza solo una stringa di connessione "normale", vale a dire senza metadati. CodeFirst genererà gli artefatti dei metadati per te sotto la copertina e li passerà all'istanza di ObjectContext senza alcuna azione aggiuntiva richiesta. Non si dovrebbe usare EntityConnectionStringBuilder.

In genere basta derivano vostro contesto dalla DbContext e fare un costruttore senza parametri che chiama base e passa il nome della stringa di connessione da esempio di configurazione:

public class MyContext : DbContext 
{ 
    public MyContext() : base("Name=NorthwindConnectionString") {} 
} 

È inoltre possibile passare una stringa di connessione al DbContext. Se si desidera utilizzare un generatore di stringhe di connessione, si utilizzerà SqlConnectionStringBuilder per questo e non EntityConnectionStringBuilder.

+0

Ciao Pawel, ho trovato la risposta e pubblicato. Ho chiesto la sostituzione di MetaData in CF, non in ConnectionString;), grazie per aver partecipato. – LastBye

+0

E il motivo del downvote era ...? – Pawel