使用ASP.NET Core上的实体框架的其他连接提供商



我正在使用ASP.NET Core 1.1与实体框架6一起连接到SQL Server Compact 3.5数据库。创建DbContext时,如何配置要使用的提供商?

mydbcontext.cs

public class MyDbContext: DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // omitted
    }
    public static DbMasContext Create(string connString)
    {
        var entityBuilder = new EntityConnectionStringBuilder();
        entityBuilder.ProviderConnectionString = connString;
        entityBuilder.Provider = "System.Data.SqlServerCe.3.5";
        return new DbMasContext(entityBuilder.ConnectionString);
    }
}

startup.cs

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddScoped(_ => DbMasContext.Create(Configuration.GetConnectionString("MyDbContext")));
    }
    // omitted
}

AppSettings.json

{
  "ConnectionStrings": {
    "MyDbContext": "DataSource=C:\MyDb.sdf;Max Database Size=2048;",
  }
}

我的代码导致此错误:

参数exception:不支持关键字:'提供商'

您需要在从DbConfiguration继承的类中指定提供商。

sqlcedbconfiguration

public class SqlCeDbConfiguration: DbConfiguration
{
    public DbConfig()
    {
        SetProviderServices("System.Data.SqlServerCe.3.5", System.Data.Entity.SqlServerCompact.Legacy.SqlCeProviderServices.Instance);
    }
}

然后,您可以将DbConfigurationType属性应用于DbContext衍生的类

mydbcontext.cs

[DbConfigurationType(typeof(SqlCeDbConfiguration))]
public class MyDbContext: DbContext
{
    // ...
}

sql Server紧凑型尚未以.NET Core的框架进行操作,因此它涉及的工作要比简单地编辑提供商以使其正常工作要多一点。您需要为其创建一个模型才能工作。

您可以使用EntityFramework.sqlservercompact软件包,并将其示例模型用作模板。

using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace Sample
{
public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlCe(@"Data Source=C:dataBlogging.sdf");
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasMany(b => b.Posts)
            .WithOne(p => p.Blog)
            .HasForeignKey(p => p.BlogId);
    }
}
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public List<Post> Posts { get; set; }
}
public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}
}

希望这会有所帮助。

相关内容

最新更新