2012-10-11 116 views
4

我打開了Asp.Net Mvc 4 Internet App。模板。我設置連接字符串爲我的數據庫是這樣的:ASP.NET簡單的會員供應商?

<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> 

我運行項目,單擊註冊按鈕。我創造了這樣一個新的用戶:

enter image description here

當我點擊註冊後我得到這個錯誤:

enter image description here

但它會在DB的新用戶,它不創造membership_user(會員表不包含添加的用戶信息):

enter image description here

我找不到問題是什麼。有時候沒有發生錯誤。

UPDATE

和異常快照:

enter image description here

AcoountModel:

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」)。如果我不使用「我」,一切都好。但是當我使用它時,我得到了那個錯誤。我如何解決這個問題。

+0

,你應該把在正在生成該錯誤消息的斷點。 有可能是一個異常,內部異常會給你更多的線索。 – nograde

+0

內部異常爲空。 –

回答

8

手動創建數據庫(不要讓你的項目創建數據庫全自動) ,當你創建數據庫集歸類到Latin1_General_CI_AS選項下..

OR

如果你的數據庫上使用土耳其語字符您的數據庫歸類必須爲Turkish_CI_AS,並且您可以更改列歸類。按照步驟操作。

PS:整理是關於如果你使用土耳其字符排序,如果你想排序像a,b,c,ç,d,e,f,g,h,ı,i,..你的數據庫整理必須是土耳其語。 。)

1)右鍵單擊username列,然後單擊修改..

2)單擊整理..

enter image description here

3),並選擇Latin1_General ..

enter image description here

單擊確定並保存更改..

+0

如果數據庫和列歸類是SQL_Latin1_General_CP1_CI_AS,應該用windows Collat​​ion Latin1_General替換它會怎麼樣? –

1

我猜你的會員表被命名錯誤或列名錯誤。 檢查類似於

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

在您的AppStart.cshtml文件中。

請參閱此鏈接瞭解更多信息:http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.initializedatabaseconnection(v=vs.111).aspx

+0

但是,它有時工作。我無法理解這一點。這是我的初始化代碼'WebSecurity.InitializeDatabaseConnection(「DefaultConnection」,「UserProfile」,「UserId」,「UserName」,autoCreateTables:true);' –

+0

看看這個主題:http://forums.asp.net/t /1715988.aspx/1 Mayby你有一個SQL服務器排序問題? – Jan

+0

如果它是錯誤的,爲什麼它將用戶添加到UserProfile表並給出錯誤。 –

2

我遲到知道它的點點,但,問題是歸類定義在數據庫中。如果在創建數據庫時選擇「TURKISH_CI_AS」排序規則,則MembershipProvider無法按預期工作。