NoSQL与实体框架核心

时间:2016-06-01 13:26:30

标签: entity-framework-core

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

3 个答案:

答案 0 :(得分:21)

支持NoSQL数据库提供程序,如Azure Table Storage,Redis和其他(如MongoDb)仍然在EF Core团队积压中,尚未实现,并且将为Core 1.0实现。 0发布。

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

答案 1 :(得分:5)

(移动评论回答,所以我没有劫持@ MortezaManavi的回答)

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

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

  1. 打开Visual Studio并创建一个新的Windows窗体应用程序。本文使用.NET 4.5的C#项目。
  2. 运行命令' Install-Package EntityFramework'在Visual Studio的Package Manger Console中安装最新版本的Entity Framework。
  3. 修改项目中的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>
    
  4. 添加对位于lib - &gt;中的System.Data.CData.MongoDB.Entities.EF6.dll的引用。安装目录中的4.0子文件夹。

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

    • 从模型构建器约定中删除PluralizingTableNameConvention。
    • 删除对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. 创建另一个.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);
      }
    }
    
  8. 现在您已经创建了一个实体,请将该实体添加到您的上下文类中:

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

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

答案 2 :(得分:3)

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

如果您仍在寻找MongoDB EF-Core提供商,可以在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

查看getting started wiki仔细查看。