Visual Studio 2012 でインターネット MVC 4 アプリケーションを作成していて、SingleMembership を使用してユーザーを追加したいと考えていました。最初に、users データベースは私が望んでいた場所ではなく、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" />
そして、メタデータ部分でいくつかのエラーが発生し、プロバイダー名がそれを「System.Data.SqlClient」に変更したため、2 つの接続文字列が必要であることに気付きました。そのため、新しい接続文字列が実際には最初のものですが、この変更により:
<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 の質問 は非常に役立ちますが、回答が提案するようにフィールドとデータ型を変更することはできません。
足りないものはありますか?または、この変更を行う前に設定する必要があるものはありますか?