Database.EnsureCreated的堆栈溢出异常EF 7 ASP.NET 5 MVC 6 [英] Stack Overflow exception at Database.EnsureCreated EF 7 ASP.NET 5 MVC 6

查看:191
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆