NoSQL與實體框架核心

entity-framework-core

我需要任何針對Entity Framework Core的NoSQL提供程序。我可以將EF-Core版本與MongoDB / Raven一起使用嗎?

一般承認的答案

對Azure Table存儲,Redis和其他(如MongoDb)等NoSQL數據庫提供程序的支持仍在EF Core團隊積壓中,尚未實現,並且不會在Core 1.0.0版本中實現。

也就是說,根據EF核心路線圖 ,對NoSQL數據庫提供商的支持是團隊的一項高優先級功能,並將在Core 1.0.0發布後的未來版本中發布。


熱門答案

(移動評論回答,所以我不是在劫持@ MortezaManavi的回答)

在您的問題中,您參考EF Core。正如我所提到的,我們有許多NoSQL數據源的ADO.NET提供程序。您可以為我們的任何提供商下載30天免費試用版(或公開測試版,具體取決於數據源)。我在答案的底部包含了我們當前NoSQL產品的鏈接。

我們的知識庫中有一篇文章,它使用代碼優先方法與EF6連接MongoDB數據(儘管無論數據源如何都可以應用這些原則)。我在這裡轉錄了那篇文章的內容。


  1. 打開Visual Studio並創建一個新的Windows窗體應用程序。本文使用.NET 4.5的C#項目。
  2. 在Visual Studio的Package Manger控制台中運行命令“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實體之後將其命名,例如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;
    



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因