2013-02-10 78 views
0

我已经明确地设置AccountsContext使用mytestdb作为SimpleMembership连接字符串,如下 -实体框架:为什么SimpleMembership寻找默认连接

public class AccountsContext : DbContext 
{ 
    public AccountsContext() 
     : base("mytestdb") 
    { 
    } 
} 

但在下面的代码行初始化数据库仍在寻找DefaultConnection因为某些原因。尽管我从web.config中完全删除了对DefaultConnection的引用。

public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute 
    { 
     private static SimpleMembershipInitializer _initializer; 
     private static object _initializerLock = new object(); 
     private static bool _isInitialized; 

     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      // Ensure ASP.NET Simple Membership is initialized only once per app start 
      LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); 
     } 
    } 

enter image description here

这里是注释的部分Web.config文件 -

<configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <!--<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />--> 
    </configSections> 
    <connectionStrings> 
    <add name="mytestdb" connectionString="Data Source=(local);Initial Catalog=mytestdb;User ID=****;Password=****" providerName="System.Data.SqlClient" /> 
    <!--<add name="DefaultConnection" 
     connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-LakshyaMvc-20130205074346;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-***.mdf" 
     providerName="System.Data.SqlClient" />--> 
    </connectionStrings> 

    <!--<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework>--> 

在这方面的任何帮助将非常有帮助。

回答

4

~/Filters/InitializeSimpleMembershipAttribute.cs文件中的SimpleMembershipInitializer私有类请看:

private class SimpleMembershipInitializer 
{ 
    public SimpleMembershipInitializer() 
    { 
     Database.SetInitializer<UsersContext>(null); 

     try 
     { 
      using (var context = new UsersContext()) 
      { 
       if (!context.Database.Exists()) 
       { 
        // Create the SimpleMembership database without Entity Framework migration schema 
        ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); 
       } 
      } 

      WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
     } 
     catch (Exception ex) 
     { 
      throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); 
     } 
    } 
} 

你注意到以下行:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 

这就是它的来源。顺便说一下,如果你看过你的异常堆栈跟踪,它会指示你到这个位置。

另外,在~/Models/AccountModel.cs文件,你可能有默认定义如下方面:

public class UsersContext : DbContext 
{ 
    public UsersContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<UserProfile> UserProfiles { get; set; } 
} 
+0

超,它就在那里。谢谢!然而,我找不到UsersContext,我只能看到AccountsContext,其连接字符串我已经修改。 – Abhijeet 2013-02-10 12:58:24