我正在使用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; }
}
}
希望这会有所帮助。