[英]Using a different connection provider for Entity Framework on ASP.NET Core
我将ASP.NET Core 1.1与Entity Framework 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);
}
}
启动文件
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;",
}
}
我的代码导致此错误:
ArgumentException:不支持关键字:“ provider”
SQL Server Compact尚未在.net核心中开箱即用,因此与简单地编辑提供程序以使其正常工作相比,它涉及的工作量更多。 您需要创建一个模型使其正常工作。
您可以使用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:\data\Blogging.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; }
}
}
希望这可以帮助。
您需要在从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
{
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.