我在 Visual Studio 2012 中制作了一个 Internet MVC 4 应用程序,我想使用 SingleMembership 添加用户。起初我看到用户数据库并不是我想要的,它们在 SQL/Express 数据库上,我希望它们在我已经为我的应用程序中的所有模型创建的 SQL/Server 上。所以我所做的是修改 Visual Studio 2012 为我的数据库创建的连接字符串:
<add name="Test2_Entities" connectionString="metadata=res://*/Models.Model.csdl|res://*/Models.Model.ssdl|res://*/Models.Model.msl;provider=System.Data.SqlClient;provider connection string="data source=FERNANDO-PC\SQLSERVER;initial catalog=Test2;persist security info=True;user id=****;password=****;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
然后我意识到我需要 2 个连接字符串,因为元数据部分出现了一些错误,并且提供程序名称将其更改为“System.Data.SqlClient”,所以新的连接字符串确实是第一个,但有以下变化:
<add name="Test2_Entities2" connectionString="data source=FERNANDO-PC\SQLSERVER;initial catalog=Test2;persist security info=True;user id=****;password=****;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
为了在我的数据库中创建用户表,我还更改了Filters文件夹中InitializeSingleMemebershipAttribute.cs文件中的一行(准确地说是第 41 行):
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
至:
WebSecurity.InitializeDatabaseConnection("Test2_Entities2", "UserProfile", "UserId", "UserName", autoCreateTables: true);
以及位于Models文件夹中的AccountModels.cs中的其他行:
public UsersContext() : base("DefaultConnection")
至:
public UsersContext() : base("Test2_Entities")
控制成员资格、角色、OAuth 和这些东西的默认表是在我想要的数据库中创建的。(这是问题的背景,并认为有些人会觉得它有帮助)
问题是在我的 SQL 数据库中创建表时,有些列不在我在AccountModels.cs中定义的数据类型中,并且没有创建其他字段。更具体地说,在AccountModels.cs我有这个类:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public Guid UserId { get; set; }
public string UserName { get; set; }
public string RandomString { get; set; }
}
在创建的表中,UserID得到一个 int,当我尝试更改时,我得到一个错误:
连接的数据库服务器不支持从“int”转换为“uniqueidentifier”。
而且,RandomString字符串不会出现在UserProfiles表中。
这个问题的答案: “我如何使用 SingleMembership 管理配置文件”stackoverflow 问题 真的很有帮助,但我不能像答案建议的那样更改字段和数据类型。
有什么我想念的吗?或者在做这些改变之前我应该设置什么?