所以
首先,我将连接字符串添加到远程服务器MSSQL Server 2008 R2,10.50.1600:
<add name="MySQLConnection" connectionString="server=xxx.x.xx.xx;initial catalog=xxxxx;user id=sa;password=xxxxxxxxxxx;"/>
然后,我在服务器端使用.NET 4.0中的aspnet_regsql配置远程数据库并添加自定义成员资格(因为inbuild不想使用WSAT)。
<membership
defaultProvider="SqlProvider"
userIsOnlineTimeWindow="20">
<providers>
<clear />
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MySQLConnection"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="/" />
</providers>
</membership>
所以,现在我可以使用WSAT配置我的应用程序,但无法进入登录或注册页面,收到错误:
System.ArgumentException: Invalid value for key 'attachdbfilename'.
Line 32: using (var context = new UsersContext())
Line 33: {
Line 34: if (!context.Database.Exists())
Line 35: {
Line 36: // Create the SimpleMembership database without Entity Framework migration schema
解决:
问题在于:
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
我不需要自定义成员资格e.t.c.-只是为我的连接字符串设置当前的DefaultConnection名称,或者在这里更改为MySQLConnectionString。
答案 0 :(得分:0)
attachdbfilename对远程数据库无效。它表示您的连接名称是MySQLConnection,但在您的成员资格中,您指定的连接字符串为“dbSkazkiEntities”。
是否有多个连接字符串?
编辑:
哇。好的,你在这里搞砸了很多东西。首先,您使用的是SimpleMembership。 SimpleMembership不使用Web.Config中配置的成员资格提供程序。它什么都没做。
其次,SimpleMembership在Filters \ InitializeSimpleMembershipAttribute.cs文件中配置,其中有一行说明:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId",
"UserName", autoCreateTables: true);
第一个参数告诉SimpleMembership使用哪个连接字符串,它叫做DefaultConnection。 DefaultConnection是machine.config中定义的回退连接,此连接默认使用localdb,它具有attachdbfilename属性。
您需要将上面的行更改为您的MySQLConnection,并删除您创建的MembershipProvider。
接下来是UsersContext也使用默认连接字符串定义。改变它。