我将ASP.Net Core 2.1
与EF 2.1
一起使用,这就是我的Context类的样子
public class MyAppContext
: DbContext
{
private string _dbConnection = @"Data Source=myServer;Database=SampleApp;uid=sa;password=******";
public MyAppContext(DbContextOptions<MyAppContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("app");
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_dbConnection);
base.OnConfiguring(optionsBuilder);
}
public DbSet<User> Users { get; set; }
public DbSet<Phone> Phones { get; set; }
}
这是我的StartUp.cs和Program.cs的样子
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
Program.cs
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Build().Run();
}
public static IWebHostBuilder BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}}
我检查了以下链接:-
和其他几个。
但是当将1.x迁移到2.x时,大多数人都在使用,但这是我的新应用。没有迁移
如何解决此错误?
谢谢。
答案 0 :(得分:1)
您在数据库类中没有没有参数的公共构造函数,因此您需要告诉编译器如何创建数据库实例。
只需添加一个新类:
internal class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<MyAppContext>
{
public MyAppContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<MyAppContext>();
builder.UseSqlServer(_dbConnection);
var context = new MyAppContext(builder.Options);
return context;
}
}
修改
下面是如何为桌面应用程序获取_dbConnection
的示例。
var currentDir = Directory.GetCurrentDirectory();
var configBuilder = new ConfigurationBuilder();
configBuilder.SetBasePath(currentDir);
configBuilder.AddJsonFile("appsettings.json");
var config = configBuilder.Build();
_dbConnection = config.GetConnectionString("DefaultConnection");