NoSQL с базой ядра Entity Framework

Мне нужен какой-либо провайдер NoSQL для Entity Framework Core. Могу ли я использовать версию EF-Core с MongoDB/Raven или что-нибудь еще?

Ответ 1

Поддержка поставщиков баз данных NoSQL, таких как хранилище таблиц Azure, Redis и других (например, MongoDb), все еще остается в группе EF Core backlog и еще не реализована и не будет реализована для выпуска Core 1.0.0.

Тем не менее, согласно EF Core Roadmap, поддержка поставщиков баз данных NoSQL является высокоприоритетной функцией для команды и будет поставляется в будущих выпусках после выпуска Core 1.0.0.

Ответ 2

(перемещение комментария для ответа, поэтому я не захвачу ответ @MortezaManavi)

В вашем вопросе вы ссылаетесь на EF Core. Как я уже упоминал, у нас есть поставщики ADO.NET для многих источников данных NoSQL. Вы можете скачать бесплатную 30-дневную пробную версию (или открытую бета-версию, в зависимости от источника данных) для любого из наших поставщиков. Я включил ссылки на наши текущие предложения NoSQL в нижней части моего ответа.

У нас есть статья в нашей Базе знаний для подключения к данным MongoDB с EF6 с использованием кодового подхода (хотя принципы могут применяться независимо от источника данных). Я переписал содержание этой статьи здесь.


  • Откройте Visual Studio и создайте новое приложение Windows Form. В этой статье используется проект С# с .NET 4.5.
  • Запустите команду "Install-Package EntityFramework" в консоли диспетчера пакетов в Visual Studio, чтобы установить последнюю версию Entity Framework.
  • Измените файл App.config в проекте, чтобы добавить ссылку на сборку MongoDB Entity Framework 6 и строку подключения.

    Задайте свойства подключения Server, Database, User и Password для подключения к 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>
    
  • Добавьте ссылку на System.Data.CData.MongoDB.Entities.EF6.dll, расположенную в подпапке lib → 4.0 в каталоге установки.

  • Создайте проект на этом этапе, чтобы убедиться, что все работает правильно. После этого вы можете начать кодирование с помощью Entity Framework.
  • Добавить новый .cs файл в проект и добавить к нему класс. Это будет ваш контекст базы данных, и он расширит класс DbContext. В этом примере этот класс называется MongoDBContext. Следующий пример кода переопределяет метод OnModelCreating, чтобы внести следующие изменения:

    • Удалить PluralizingTableNameConvention из соглашений ModelBuilder.
    • Удалите запросы в таблицу 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>();
        }  
      }
      
  • Создайте еще один файл .cs и назовите его после объекта MongoDB, который вы получаете, например, клиенты. В этом файле определите как Entity, так и Entity Configuration, которые будут выглядеть следующим образом:

    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);
      }
    }
    
  • Теперь, когда вы создали сущность, добавьте объект в свой класс контекста:

    public DbSet<Customers> Customers { set; get; }
    
  • С завершением контекста и объекта теперь вы готовы запросить данные в отдельном классе. Например:

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

Ответ 3

Отказ от ответственности: я являюсь владельцем и оператором этого проекта с открытым исходным кодом.

Если вы все еще ищете провайдера EF-Core от MongoDB, вы можете найти моего провайдера в GitHub: EntityFrameworkCore.MongoDB. В настоящее время проект включает поставщика базы данных EF-Core и поставщика основных идентификаторов ASP.NET.

ПРИМЕЧАНИЕ: поставщик все еще находится в предварительном просмотре/предварительном просмотре, ожидая надлежащей поддержки сложных типов в EF-Core StateManager.

Вы можете перейти к пакетам, добавив в проект следующий источник NuGet:

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

Посмотрите начало работы wiki для более пристального просмотра.