我有最奇怪的问题!
- 我有一个 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; } }
我为新的配置文件功能设置了一些编辑页面和控制器......最终,当我以注册用户身份登录并访问 UserProfile/Edit 页面时,我现在可以填写信息,当我点击保存时它会调用context.SaveChanges()。
当我 refrssh 页面时,所有信息仍然存在,尽管 url 现在已经获得了查询参数,其中包含我的所有个人资料详细信息......这很废话,但我认为我的数据库一定有问题,这就是信息所在来自...但是没有...如果我删除查询参数并刷新页面,我仍然会收到信息填写我的用户配置文件的编辑字段...
所以我想,哇,它第一次奏效。酷豆!我兴奋地看着我的数据库……然后在我创建的 UserProfiles 表中发现 NO ENTRY?
那么这些数据到底存储在哪里以便能够被调用?!?!?!
我想也许创建的数据库是一个红鲱鱼,事实上实体已经巧妙地在一个单独的数据库中设置了一个新表,但我的 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() });
}
}
数据源=(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;集成安全=真
-------------实际网站--------------
访问时的 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