【问题标题】:NoSQL with Entity Framework Core [closed]NoSQL 与 Entity Framework Core [关闭]
【发布时间】:2018-06-13 17:34:13
【问题描述】:

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

【问题讨论】:

标签: entity-framework-core


【解决方案1】:

对 Azure 表存储、Redis 和其他(如 MongoDb)等 NoSQL 数据库提供程序的支持仍在 EF Core 团队积压中,尚未实施,并且将不会在 Core 1.0 中实施。 0 发布。

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

【讨论】:

  • 谢谢,我看到了有关 Azure 表的 Julie Lerman 示例。所以这意味着我必须稍等片刻,或者你有什么技巧可以使用 BrightstarDB?
  • 她的代码示例基于 EntityFramework.AzureTableStorage 7.0.0-beta1 nuget 包,但它已在 RC2 版本中被删除,如您在此处看到的:nuget.org/packages?q=Microsoft.EntityFrameworkCore
  • 不幸的是,我认为我们不走运将 EF Core 1.0.0 与 NoSQL 数据库一起使用。
  • @BassamAlugili 如果您可以接受付费解决方案,CData Software(我工作的公司)创建了 ADO.NET 提供程序,允许您创建一个连接到 NoSQL 源的 EF 项目,例如 @ 987654323@、CouchbaseCassandra
  • @JerodJohnson 谢谢你的信息。你有类似 30 天的测试版本吗?
【解决方案2】:

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

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

注意:提供程序仍处于预览/预发布阶段,等待对 EF-Core 的 StateManager 中复杂类型的适当支持。

您可以通过将以下 NuGet 源代码添加到您的项目来访问这些包:

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

查看getting started wiki 进行详细了解。

【讨论】:

  • 是否支持不丢失数据的继承模型?
  • 如果您询问多态性,那么是的,它支持开箱即用。该 repo 有一个示例域项目和一些演示此功能的测试。但请注意,EFCore-MongoDB 仍处于测试版/预览版中,等待对 EF-Core 2.0(项目所基于的版本)中复杂类型的适当支持。
【解决方案3】:

(移动评论回答,所以我没有劫持@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 文件以添加对 MongoDB Entity Framework 6 程序集和连接字符串的引用。

    设置服务器、数据库、用户和密码连接属性以连接到 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. 向项目中添加一个新的 .cs 文件并为其添加一个类。这将是您的数据库上下文,它将扩展 DbContext 类。在示例中,这个类被命名为 MongoDBContext。以下代码示例覆盖 OnModelCreating 方法以进行以下更改:

    • 从 ModelBuilder 约定中删除 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 实体命名,例如,客户。在此文件中,定义实体和实体配置,类似于以下示例:

    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;
    

【讨论】:

  • 现在我收到一个错误:[500] 无法执行指定的命令:execmodel.Rowset.execute():集合“客户”不存在。任何想法
  • @BassamAlugili 我很乐意在这里尽我所能提供帮助,但在这种情况下,您可能需要联系我们的Support Team,因为他们能够更好地帮助您调试您遇到的任何具体问题。
  • 您可以在最后 5 分钟内在添加的视频链接中看到我的测试。 youtube.com/watch?v=s2XpXQTcmHM我会用EF写一些关于nosql的博客。
  • 一件事对我来说非常重要,我该怎么做 dbContext.Customers.Include("Customers.Orders");我需要客户中的嵌套集合吗?
  • @BassamAlugili 最好的答案是使用静态模式。不幸的是,这样做的方式对于 SO 评论来说太复杂了。你能联系我们的Support Team吗?
猜你喜欢
  • 2021-06-24
  • 1970-01-01
  • 2022-08-02
  • 2018-03-08
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多