具有 Entity Framework 个核心的 NoSQL

NoSQL with Entity Framework Core

我需要 Entity Framework Core 的任何 NoSQL 提供程序。我可以将 EF-Core 版本与 MongoDB /Raven 或其他任何东西一起使用吗?

对 Azure Table 存储、Redis 和其他(如 MongoDb)等 NoSQL 数据库提供商的支持仍在 EF Core 团队积压中,尚未实施,将 为 Core 1.0.0 版本实施。

也就是说,根据 EF Core Roadmap,对 NoSQL 数据库提供程序的支持是团队的一项高优先级功能,将在 Core 1.0.0 发布后的未来版本中提供。

(移动评论来回答,所以我不是劫持@MortezaManavi 的回答)

在您的问题中,您引用了 EF Core。正如我提到的,我们为许多 NoSQL 数据源提供了 ADO.NET 个提供程序。您可以为我们的任何提供商下载 30 天免费试用版(或公开测试版,具体取决于数据源)。我在回答的底部包含了指向我们当前 NoSQL 产品的链接。

我们的知识库中有一篇文章使用代码优先方法使用 EF6 连接到 MongoDB 数据(尽管无论数据源如何,都可以应用这些原则)。我把that article的内容抄录在这里。


  1. 打开 Visual Studio 并创建一个新的 Windows 表单应用程序。本文使用带有 .NET 4.5 的 C# 项目。
  2. 运行 Visual Studio 中的包管理器控制台中的命令 'Install-Package EntityFramework' 安装最新版本的 Entity Framework。
  3. 修改项目中的App.config文件,添加对MongoDBEntity Framework6程序集和连接字符串的引用。

    设置服务器、数据库、用户和密码连接属性以连接到 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. 添加对System.Data.CData.MongoDB.Entities.EF6.dll的引用,位于安装目录的lib -> 4.0子文件夹中。

  5. 此时构建项目以确保一切正常。完成后,您可以使用 Entity Framework.
  6. 开始编码
  7. 在项目中添加一个新的.cs文件,并在其中添加一个class。这将是您的数据库上下文,它将扩展 DbContext class。在示例中,此 class 被命名为 MongoDBContext。以下代码示例重写 OnModelCreating 方法以进行以下更改:

    • 从模型构建器约定中删除 PluralizingTableNameConvention。
    • 删除对 MigrationHistory 的请求 table。

      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>();
        }  
      }
      
  8. 创建另一个 .cs 文件并以您正在检索的 MongoDB 实体命名,例如,Customers。在此文件中,定义实体和实体配置,类似于以下示例:

    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);
      }
    }
    
  9. 现在您已经创建了一个实体,将实体添加到您的上下文中 class:

    public DbSet<Customers> Customers { set; get; }
    
  10. 上下文和实体完成后,您现在可以在单独的 class 中查询数据了。例如:

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

免责声明:我是这个开源项目的所有者和运营者。

如果您仍在寻找 MongoDB EF-Core 提供商,您可以在 GitHub 上找到我的提供商:EntityFrameworkCore.MongoDB。该项目目前包括一个 EF-Core 数据库提供程序和一个 ASP.NET Core Identity 提供程序。

注意:提供程序仍在 preview/prerelease 等待 EF-Core StateManager.

对复杂类型的适当支持

您可以通过将以下 NuGet 源添加到您的项目来获取这些包:

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

查看 getting started wiki 以进一步了解。