4

我打开了 Asp.Net Mvc 4 Internet App。模板。我为我的数据库设置连接字符串,如下所示:

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=ALI-PC\;Initial Catalog=OsosPlusDb;Persist Security Info=True;User ID=sa;Password=sa;" providerName="System.Data.SqlClient" />
</connectionStrings>

我运行项目,单击注册按钮。我创建了一个这样的新用户:

在此处输入图像描述

当我单击注册发布时,我收到此错误:

在此处输入图像描述

但它在 DB 中创建了一个新用户并且它不创建membership_user(会员表不包含添加的用户信息):

在此处输入图像描述

我找不到什么问题。有时没有错误发生。

更新

和异常快照:

在此处输入图像描述

账户型号:

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

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

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
}

InitializeSimpleMembershipAttribute.cs

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
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);
    }

    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);
            }
        }
    }
}

最后的编辑和总结

问题是字符(“i”)。如果我不使用“i”,一切都会好起来的。但是当我使用它时,我得到了那个错误。我该如何解决这个问题。

4

3 回答 3

8

手动创建数据库(不允许您的项目自动创建数据库),当您创建数据库时,在 Options.. 下将排序规则设置为 Latin1_General_CI_AS

或者

如果您在数据库中使用土耳其语字符,您的数据库排序规则必须是Turkish_CI_AS,您可以更改列排序规则。按照以下步骤操作。

PS:排序规则是关于排序,如果你使用土耳其字符,如果你想排序像 a,b,c,ç,d,e,f,g,h,ı,i,.. 你的数据库排序规则必须是土耳其语..)

1)右键单击用户名列,然后单击修改..

在此处输入图像描述

2)点击排序规则..

在此处输入图像描述

3)然后选择Latin1_General..

在此处输入图像描述

单击确定并保存您的更改..

于 2013-02-26T15:55:15.307 回答
2

我知道它有点晚了,但是问题是您的数据库中的排序规则定义。如果您在创建数据库时选择“TURKISH_CI_AS”排序规则,则 MembershipProvider 无法按预期工作。

于 2013-02-15T22:33:58.460 回答
1

我猜您的成员资格表命名错误或列名错误。检查类似于

WebSecurity.InitializeDatabaseConnection(
     "StarterSite", "UserProfile", "UserId", "Email", autoCreateTables: true);

在您的 AppStart.cshtml 文件中。

有关详细信息,请参阅此链接:http: //msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.initializeddatabaseconnection (v=vs.111).aspx

于 2012-10-31T09:30:55.683 回答