2016-06-01 33 views
14

Ho bisogno di qualsiasi provider NoSQL per Entity Framework Core. Posso usare la versione EF-Core con MongoDB/Raven o altro?NoSQL con Entity Framework Core

+0

https://www.youtube.com/watch?v=s2XpXQTcmHM questa è una piccola introduzione su NoSql con EF, l'ho provato con EF 6/MongoDb. su EF Core 1.0 come @MortezaManavi ha detto che dobbiamo aspettare fino a quando non è fatto! –

+0

https://github.com/crhairr/EntityFrameworkCore.MongoDb –

risposta

18

Il supporto per provider di database NoSQL come Azure Table Storage, Redis e altri (come MongoDb) sono ancora nel backlog del team EF Core e non è ancora stato implementato e sarà non implementato per la versione Core 1.0.0.

Detto questo, in base allo EF Core Roadmap, il supporto per i provider di database NoSQL è una funzionalità ad alta priorità per il team e verrà distribuito nelle versioni future dopo la release di Core 1.0.0.

+0

Grazie, ho visto l'esempio di Julie Lerman sul tavolo Azure. quindi questo significa che devo aspettare un po 'o che hai qualche trucco per usare BrightstarDB? –

+1

Il suo esempio di codice era basato sul pacchetto nuget EntityFramework.AzureTableStorage 7.0.0-beta1 ma è stato rilasciato in RC2 come potete vedere qui: https://www.nuget.org/packages?q=Microsoft.EntityFrameworkCore –

+0

I penso che siamo sfortunati ad usare EF Core 1.0.0 con i database NoSQL, sfortunatamente. –

5

(movimento commento a rispondere, quindi non mi dirottamento @ risposta di MortezaManavi)

Nella tua domanda, si fa riferimento EF Nucleo. Come ho detto, abbiamo un provider ADO.NET per molte fonti di dati NoSQL. Puoi scaricare una versione di prova gratuita di 30 giorni (o open beta, a seconda della fonte dei dati) per uno qualsiasi dei nostri fornitori. Ho incluso collegamenti alle nostre attuali offerte NoSQL nella parte inferiore della mia risposta.

Abbiamo un articolo nella nostra Knowledge Base per la connessione ai dati MongoDB con EF6 utilizzando un approccio code-first (sebbene i principi possano essere applicati indipendentemente dall'origine dati). Ho trascritto il contenuto di that article qui.


  1. Aprire Visual Studio e creare un nuovo modulo di domanda di Windows. Questo articolo utilizza un progetto C# con .NET 4.5.
  2. Eseguire il comando "Install-Package EntityFramework" nella console di Gestione pacchetti in Visual Studio per installare l'ultima versione di Entity Framework.
  3. Modificare il file App.config nel progetto per aggiungere un riferimento all'assembly Entity Framework 6 MongoDB e alla stringa di connessione.

    Impostare le proprietà di connessione Server, Database, Utente e Password per connettersi a MongoDB.

    <configuration> 
        ... 
        <connectionStrings> 
        <add name=&quot;MongoDBContext&quot; connectionString=&quot;Offline=False;Server=MyServer;Port=27017;Database=test;User=test;&quot; providerName=&quot;System.Data.CData.MongoDB&quot; /> 
        </connectionStrings> 
        <entityFramework> 
        <providers> 
         ... 
         <provider invariantName=&quot;System.Data.CData.MongoDB&quot; type=&quot;System.Data.CData.MongoDB.MongoDBProviderServices, System.Data.CData.MongoDB.Entities.EF6&quot; /> 
        </providers> 
        <entityFramework> 
    </configuration> 
    
  4. Aggiungere un riferimento alla System.Data.CData.MongoDB.Entities.EF6.dll, che si trova nella cartella lib -> 4.0 sottocartella nella directory di installazione.

  5. Costruire il progetto a questo punto per assicurarsi che tutto funzioni correttamente. Una volta fatto, è possibile iniziare la codifica utilizzando Entity Framework.
  6. Aggiungi un nuovo file .cs al progetto e aggiungi una classe. Questo sarà il contesto del tuo database e estenderà la classe DbContext. Nell'esempio, questa classe si chiama MongoDBContext. Il seguente esempio di codice sostituisce il metodo OnModelCreating per apportare le seguenti modifiche:

    • Rimuovere PluralizingTableNameConvention dalle convenzioni ModelBuilder.
    • Rimuovere richieste alla tabella MigrationHistory.

      using System.Data.Entity; 
      using System.Data.Entity.Infrastructure; 
      using System.Data.Entity.ModelConfiguration.Conventions; 
      
      class MongoDBContext : DbContext { 
          public MongoDBContext() { } 
      
          protected override void OnModelCreating(DbModelBuilder modelBuilder) 
          { 
          // To remove the requests to the Migration History table 
          Database.SetInitializer<MongoDBContext>(null); 
          // To remove the plural names  
          modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
          } 
      } 
      
  7. creare un altro file con estensione cs e il nome dopo che l'entità MongoDB si stanno recuperando, ad esempio, i clienti.In questo file, definire sia l'entità e la configurazione di entità, che sarà simile al seguente esempio:

    using System.Data.Entity.ModelConfiguration; 
    using System.ComponentModel.DataAnnotations.Schema; 
    
    [System.ComponentModel.DataAnnotations.Schema.Table("Customers")] 
    public class Customers { 
        [System.ComponentModel.DataAnnotations.Key] 
    
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
        public System.String _id { get; set; } 
        public System.String CompanyName { get; set; } 
    } 
    
    public class CustomersMap : EntityTypeConfiguration<Customers> { 
        public CustomersMap() { 
        this.ToTable(&quot;Customers&quot;); 
        this.HasKey(Customers => Customers._id); 
        this.Property(Customers => Customers.CompanyName); 
        } 
    } 
    
  8. Ora che avete creato un'entità, aggiungere l'entità alla classe contesto:

    public DbSet<Customers> Customers { set; get; } 
    
  9. Completato il contesto e l'entità, è ora possibile eseguire una query dei dati in una classe separata. Per esempio:

    MongoDBContext context = new MongoDBContext(); 
    context.Configuration.UseDatabaseNullSemantics = true; 
    var query = from line in context.Customers select line; 
    

+0

Lo testerò e fornirò un feedback grazie –

+0

ora ricevo un errore: [500] Impossibile eseguire il comando specificato: execmodel.Rowset.execute (): La collezione "Clienti" non esiste. qualsiasi idea –

+1

@BassamAlugili Sono felice di aiutarti qui dove posso, ma in questo caso, probabilmente vorrai contattare il nostro [Support Team] (http://www.cdata.com/support/submit. aspx), dal momento che sono meglio equipaggiati per aiutarti a eseguire il debug di eventuali problemi specifici che stai vedendo. –

3

Disclaimer: io sono il proprietario e gestore di questo progetto open source.

Nel caso in cui si stia ancora cercando un provider MongoDB EF-Core, è possibile trovare il mio provider su GitHub: EntityFrameworkCore.MongoDB. Il progetto include attualmente un provider di database EF-Core e un provider di identità Core ASP.NET.

NOTA: il provider è ancora in anteprima/prerelease in attesa di supporto adeguato per tipi complessi in EF-Core StateManager.

Si può raggiungere i pacchetti aggiungendo la seguente fonte NuGet al progetto:

nuget sources add -name EFCore-MongoDb -Source https://www.myget.org/gallery/efcore-mongodb

Scopri i getting started wiki per uno sguardo più attento.

+0

Grazie mille! Lo testerò questo fine settimana e se lavorerò un po 'mi unirò a te per svilupparlo su Github. –

+0

supporta il modello di ereditarietà senza perdita di dati? – deadManN

+0

Se stai chiedendo informazioni sul polimorfismo, allora sì, supporta quella immediatamente pronta all'uso Il repository ha un progetto di dominio di esempio e una manciata di test che dimostrano questa funzionalità Si prega di notare, tuttavia, che EFCore-MongoDB è ancora in beta/anteprima in attesa del supporto adeguato per tipi complessi in EF-Core 2.0 (che è la versione con cui il progetto è costruito). –

Problemi correlati