其他分享
首页 > 其他分享> > Entity Framework Core配置DbContext的两种方式

Entity Framework Core配置DbContext的两种方式

作者:互联网

原文:Entity Framework Core配置DbContext的两种方式

Entity Framework Core配置DbContext的两种方式

​ 使用Entity Framework迁移过程中遇到过一个问题,在这里拿出来晒晒。

Unable to create an object of type 'xxxContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

​ 要解决这个问题,就是我下面要阐述的内容了。

1. DbContext的两种配置方式

​ 我们先来看看DbContext的两个构造函数:

protected DbContext();
public DbContext([NotNullAttribute] DbContextOptions options);

​ 还有DbContext的两个重写方法:

protected internal virtual void OnConfiguring(DbContextOptionsBuilder optionsBuilder);
protected internal virtual void OnModelCreating(ModelBuilder modelBuilder);

​ 根据错误提示,在微软的官方文档中,我们知道了配置DbContext有两种方式:

2. 迁移过程中的工厂方法

​ 那么按照官网的做法去写的话,为什么还会出现文章最开头的那个错误呢?这里我使用控制台和Asp.net core程序各创建了一次程序后,发现上述问题是我在使用控制台程序测试代码时出现的,而Asp.net core程序却没有出现(具体的原理我还不清楚,希望各路大侠看到能帮助解答一下)。

​ 这里说一下控制台程序出现此问题的解决办法(微软官方文档):

public class BloggingContextFactory : IDesignTimeDbContextFactory<BloggingContext>
{
	public BloggingContext CreateDbContext(string[] args)
	{
		var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
		optionsBuilder.UseSqlite("Data Source=blog.db");

		return new BloggingContext(optionsBuilder.Options);
	}
}

​ “可以通过实现接口来告诉工具如何创建 DbContext,通过创建类实现接口IDesignTimeDbContextFactory<TContext>,如果实现此接口的类在与派生的项目相同的项目中或应用程序的启动项目中找到,则这些工具将绕过创建 DbContext 的其他方法,并改用设计时工厂。”

​ 问题便可迎刃而解。

3. 总结

​ 以上解决方法仅针对控制台程序使用或测试Entity Framework时出现的问题,因为Asp.net程序按照官网给定的两种方式去实现的话,不会出现这个问题。

标签:Core,DbContext,BloggingContext,Framework,optionsBuilder,Entity,public
来源: https://www.cnblogs.com/lonelyxmas/p/12961049.html