私は最も奇妙な問題を抱えています!
- MVC アプリケーションがあり、デフォルトの Microsoft 認証を使用しています。
- アプリを起動してユーザー登録しました。
- アプリケーションを閉じると、新しいデータベース (LocalDb)\v11.0 が接続されていることがわかりました。
UserProfiles というテーブルを作成しました。
CREATE TABLE UserProfiles ( [Id] INT NOT NULL PRIMARY KEY, [UserId] NVARCHAR(128) NULL, [Email] NCHAR(10) NULL, [DateCreated] DATETIME2 NULL, [LastModified] DATETIME2 NULL, [FirstName] NVARCHAR(50) NULL, [LastName] NVARCHAR(50) NULL, CONSTRAINT [FK_UserProfiles_AspNetUsers] FOREIGN KEY (UserId) REFERENCES [AspNetUsers](Id) )
すべての列を UserProfile というクラスにコピーしました。
public class UserProfile { [Key] [Required] [HiddenInput(DisplayValue = false)] public int Id { get; set; } [Required] [HiddenInput(DisplayValue = false)] //[Association("AspNetUser", "UserId", "UserId")] public string UserId { get; set; } // Link with AspNetUsers user entry [DataType(DataType.EmailAddress)] public string Email { get; set; } [DataType(DataType.DateTime)] public DateTime DateCreated { get; set; } [DataType(DataType.DateTime)] public DateTime LastModified { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
EFDbContext クラスをセットアップします。
class EFDbContext : DbContext { public DbSet<UserProfile> UserProfiles { get; set; } }
新しいプロファイル機能用にいくつかの編集ページとコントローラーをセットアップしました...最終的に、登録ユーザーとしてログインし、ユーザープロファイル/編集ページにアクセスすると、情報を入力できるようになり、保存を押すと呼び出されますcontext.SaveChanges()。
ページを参照すると、すべての情報が残っていますが、URL にはすべてのプロファイルの詳細が含まれるクエリ パラメータが含まれています。から来ています...しかしいいえ...クエリパラメーターを削除してページを更新しても、ユーザープロファイルの編集フィールドに情報が入力されます...
だから、初めてうまくいったと思います。クールビーンズ!わくわくしながらデータベースを調べたところ、作成した UserProfiles テーブルにエントリがありませんでしたか?
では、このデータは、再呼び出しできるようにどこに保存されているのでしょうか?!?!?!
おそらく、作成されたデータベースはニシンであり、実際にはエンティティが別のデータベースに新しいテーブルを巧みにセットアップしたと思いましたが、私の web.config はそうではないと述べています:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-James.WebUI-20131114020024.mdf;Initial Catalog=aspnet-James.WebUI-20131114020024;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
だから私の質問はです。私の美しいデータベースに保存されていない場合、データは一体どこに保存されているのでしょうか?
追加情報
ユーザープロファイルリポジトリ:
public class EFUserProfileRepository : IUserProfileRepository
{
private EFDbContext context = new EFDbContext();
public IEnumerable<UserProfile> UserProfiles { get { return context.UserProfiles; } }
public void SaveUserProfile(UserProfile userProfile)
{
if (userProfile.Id == 0)
{
userProfile.DateCreated = DateTime.Now;
userProfile.LastModified = DateTime.Now;
context.UserProfiles.Add(userProfile);
}
else
{
UserProfile dbEntry = context.UserProfiles.Find(userProfile.Id);
if (dbEntry != null)
{
dbEntry.Id = userProfile.Id;
dbEntry.UserId = userProfile.UserId;
dbEntry.LastModified = DateTime.Now;
dbEntry.DateCreated = userProfile.DateCreated;
dbEntry.Email = userProfile.Email;
dbEntry.FirstName = userProfile.FirstName;
dbEntry.LastName = userProfile.LastName;
}
}
context.SaveChanges();
}
public UserProfile DeleteUserProfile(int userProfileId)
{
UserProfile dbEntry = context.UserProfiles.Find(userProfileId);
if (dbEntry != null)
{
context.UserProfiles.Remove(dbEntry);
context.SaveChanges();
}
return dbEntry;
}
}
ユーザープロファイルコントローラー
public class UserProfileController : Controller
{
private IUserProfileRepository repository = new EFUserProfileRepository(); // Remove this when Unity implemented
public UserProfileController(/*IUserProfileRepository repo*/)
{
//repository = repo;
}
public ActionResult Index()
{
UserProfile userProfile = repository.UserProfiles.FirstOrDefault(uP => uP.UserId == User.Identity.GetUserId());
if(userProfile == null)
{
return RedirectToAction("Create");
}
else
{
return RedirectToAction("Edit", userProfile);
}
}
public ViewResult Edit()
{
UserProfile userProfile = repository.UserProfiles.FirstOrDefault(uP => uP.UserId == User.Identity.GetUserId());
return View(userProfile);
}
[HttpPost]
public ActionResult Edit(UserProfile userProfile)
{
if (ModelState.IsValid)
{
repository.SaveUserProfile(userProfile);
TempData["Message"] = "The Profile has been succesfully edited";
return RedirectToAction("Index");
}
else
{
return View();
}
}
public ViewResult Create()
{
return View("Edit", new UserProfile { UserId = User.Identity.GetUserId() });
}
}
Data Source=(LocalDb)\v11.0;AttachDbFilename="C:\Users\James\Documents\Visual Studio 2013\Projects\James\James.WebUI\App_Data\aspnet-James.WebUI-20131114020024.mdf";初期カタログ=aspnet-James.WebUI-20131114020024;統合セキュリティ=True
-------------実際のウェブサイト--------------
UserProfile/Edit ページにアクセスすると、次の URL に移動します。
...localhost:53417/UserProfile/Edit/4?UserId=********&Email=********&DateCreated=11%2F14%2F2013%2012%3A56%3A19&LastModified=11%2F14%2F2013%2013%3A07%3A05&FirstName=Jimmy&LastName=Trusler
したがって、ここから詳細が得られることは明らかです...しかし、その一連のクエリパラメーターを削除しても、ページは更新後も情報をレンダリングします。
...localhost:53417/UserProfile/Edit