gpt4 book ai didi

c# - 创建模型时不能使用上下文。 dbContext 正在其他地方使用?

转载 作者:太空狗 更新时间:2023-10-29 23:38:50 26 4
gpt4 key购买 nike

我正在使用 EF6 和 Identity2这是我收到的错误:

{"The context cannot be used while the model is being created. This exception may be thrown if the context is used inside the OnModelCreating method or if the same context instance is accessed by multiple threads concurrently. Note that instance members of DbContext and related classes are not guaranteed to be thread safe."}

我也看了这段代码,想不通:

"Context cannot be used while the model is being created" exception with ASP.NET Identity

这是我的代码:

启动.Auth.cs:

namespace IdentitySample {
public partial class Startup {
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app) {
// Configure the db context, user manager and role manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/account/login"),
Provider = new CookieAuthenticationProvider {
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

// Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

// Enables the application to remember the second login verification factor such as phone or email.
// Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.
// This is similar to the RememberMe option when you log in.
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

// Uncomment the following lines to enable logging in with third party login providers
//app.UseMicrosoftAccountAuthentication(
// clientId: "",
// clientSecret: "");

//app.UseTwitterAuthentication(
// consumerKey: "",
// consumerSecret: "");

//app.UseFacebookAuthentication(
// appId: "",
// appSecret: "");

app.UseGoogleAuthentication();
}
}

这是我的数据库初始化器:

        public override void InitializeDatabase(ApplicationDbContext context)
{
if (!context.Database.Exists())
{
// If database did not exist before, create it
context.Database.Create();
}
else
{
// Query to check if MigrationHistory table is present in the database
var migrationHistoryTableExists =
((IObjectContextAdapter)context).ObjectContext.ExecuteStoreQuery<int>(
string.Format(
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{0}' "
+ "AND table_name = '__MigrationHistory'",
"[worldbigtree.security]"));

// If MigrationHistory table is not there (which is the case first time we run), create it
if (migrationHistoryTableExists.FirstOrDefault() == 0)
{
if (settings.RecreateDatabase)
{
context.Database.Delete();
context.Database.Create();
InitializeIdentityForEF(context);
}
}
}


base.Seed(context);
}

应用程序数据库上下文:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
Database.SetInitializer<ApplicationDbContext>(new MySqlInitializer());
}

static ApplicationDbContext()
{
// Set the database intializer which is run once during application start
// This seeds the database with admin user credentials and admin role
Database.SetInitializer<ApplicationDbContext>(new MySqlInitializer());
}

public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}

public DbSet<Person> People { get; set; }
}

最佳答案

你做不到。你的问题的答案是肯定的。在上下文的构造函数中,您正在初始化数据库。并且您不能同时执行任何 CRUD 操作,同时初始化数据库尚未完成。您将插入或选择,但 Context 用于 Database.SetInitializer。我没有试过这个,但检查一下你能用 ADO.NET 做吗?如果不能,请检查:ODBC(Open Database Connectivity)

关于c# - 创建模型时不能使用上下文。 dbContext 正在其他地方使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23849167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com