Database.EnsureCreated的堆栈溢出异常EF 7 ASP.NET 5 MVC 6 [英] Stack Overflow exception at Database.EnsureCreated EF 7 ASP.NET 5 MVC 6
问题描述
启动时启动功能。 cs
public Startup(IHostingEnvironment env)
{
//设置配置源。
var builder = new ConfigurationBuilder()
.AddJsonFile(appsettings.json)
.AddEnvironmentVariables();
if(env.IsDevelopment())
{
//这将通过Application Insights管道快速推送遥测数据,从而可以立即查看结果。
builder.AddApplicationInsightsSettings(developerMode:true);
}
Configuration = builder.Build();
Globals.Configuration =配置;
Globals.HostingEnvironment = env;
Globals.EnsureDatabaseCreated();
}
Globals.EnsureDatabaseCreated()
public static void EnsureDatabaseCreated()
{
var optionsBuilder = new DbContextOptionsBuilder();
if(HostingEnvironment.IsDevelopment())optionsBuilder.UseSqlServer(Configuration [Data:dev:DataContext]);
else if(HostingEnvironment.IsStaging())optionsBuilder.UseSqlServer(Configuration [Data:staging:DataContext]);
else if(HostingEnvironment.IsProduction())optionsBuilder.UseSqlServer(Configuration [Data:live:DataContext]);
var context = new ApplicationContext(optionsBuilder.Options);
context.Database.EnsureCreated();
optionsBuilder = new DbContextOptionsBuilder();
if(HostingEnvironment.IsDevelopment())optionsBuilder.UseSqlServer(Configuration [Data:dev:TransientContext]);
else if(HostingEnvironment.IsStaging())optionsBuilder.UseSqlServer(Configuration [Data:staging:TransientContext]);
else if(HostingEnvironment.IsProduction())optionsBuilder.UseSqlServer(Configuration [Data:live:TransientContext]);
new TransientContext(optionsBuilder.Options).Database.EnsureCreated();
}
ApplicationContext.cs
public class ApplicationContext:DbContext
{
public DbSet< Models.Security.User>登录{get;组; }
public DbSet< Models.Security.Session>会话{get;组; }
public DbSet< Models.Security.Verification> VerificationTokens {get;组; }
public DbSet< Models.CRM.User>用户{get;组; }
public DbSet< Models.CRM.Organization>商人{get;组; }
public DbSet< Models.CRM.LinkedAddress>商店{get;组; }
public DbSet< Models.CRM.ContactDetail>联系方式组; }
public DbSet< Models.CRM.Location>地点{get;组;
public ApplicationContext(DbContextOptions options):base(options)
{
}
}
错误屏幕截图
等待两天的答案后,不幸的是我最终创建了一个新的项目,并在那里复制代码,并且它的工作。看起来像一个配置问题。
注意:由于我没有收到任何答案,我标记为正确答案。如果用户未来会分享他们的观点,如果对未来的读者增添一些价值,我将很乐意标记他们的答案。
I am encountering an error at Database creation at Application Start whereas the exact same code works perfectly fine in all other projects.
Startup function in Startup.cs
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
if (env.IsDevelopment())
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
Configuration = builder.Build();
Globals.Configuration = Configuration;
Globals.HostingEnvironment = env;
Globals.EnsureDatabaseCreated();
}
Globals.EnsureDatabaseCreated()
public static void EnsureDatabaseCreated()
{
var optionsBuilder = new DbContextOptionsBuilder();
if (HostingEnvironment.IsDevelopment()) optionsBuilder.UseSqlServer(Configuration["Data:dev:DataContext"]);
else if (HostingEnvironment.IsStaging()) optionsBuilder.UseSqlServer(Configuration["Data:staging:DataContext"]);
else if (HostingEnvironment.IsProduction()) optionsBuilder.UseSqlServer(Configuration["Data:live:DataContext"]);
var context = new ApplicationContext(optionsBuilder.Options);
context.Database.EnsureCreated();
optionsBuilder = new DbContextOptionsBuilder();
if (HostingEnvironment.IsDevelopment()) optionsBuilder.UseSqlServer(Configuration["Data:dev:TransientContext"]);
else if (HostingEnvironment.IsStaging()) optionsBuilder.UseSqlServer(Configuration["Data:staging:TransientContext"]);
else if (HostingEnvironment.IsProduction()) optionsBuilder.UseSqlServer(Configuration["Data:live:TransientContext"]);
new TransientContext(optionsBuilder.Options).Database.EnsureCreated();
}
ApplicationContext.cs
public class ApplicationContext : DbContext
{
public DbSet<Models.Security.User> Logins { get; set; }
public DbSet<Models.Security.Session> Sessions { get; set; }
public DbSet<Models.Security.Verification> VerificationTokens { get; set; }
public DbSet<Models.CRM.User> Users { get; set; }
public DbSet<Models.CRM.Organization> Merchants { get; set; }
public DbSet<Models.CRM.LinkedAddress> Shops { get; set; }
public DbSet<Models.CRM.ContactDetail> ContactDetails { get; set; }
public DbSet<Models.CRM.Location> Locations { get; set; }
public ApplicationContext(DbContextOptions options) : base(options)
{
}
}
Error Screenshot
After waiting for two days for an answer, unfortunately i ended up creating a new project and copying code there and it worked. Seems like a configuration issue.
Note: Since i didn't received any answers i am marking this as the correct answer. If a user comes in future and share their viewpoints, i will be happy to mark their answer if it adds some value to future readers.
这篇关于Database.EnsureCreated的堆栈溢出异常EF 7 ASP.NET 5 MVC 6的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!