无法找出数据的存储位置

时间:2013-11-14 13:55:39

标签: c# sql entity-framework

我有最奇怪的问题!

  1. 我有一个MVC应用程序,并使用默认的Microsoft身份验证。
  2. 我启动了应用程序并注册了用户。
  3. 我关闭了应用程序,发现已连接一个新数据库(LocalDb)\ v11.0。
  4. 我创建了一个名为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; }
    }
    
  5. 我设置了一个EFDbContext类:

    class EFDbContext : DbContext
    {
        public DbSet<UserProfile> UserProfiles { get; set; }
    }
    
  6. 我为新的个人资料功能设置了一些编辑页面和控制器...... 最后,当我以注册用户身份登录并访问UserProfile / Edit页面时,我现在可以填写信息,当我点击保存时,它会调用context.SaveChanges()。

  7. 当我重新扫描页面时,所有信息仍然存在,尽管url现在已经获得了查询参数,其中包含了我的所有个人资料详细信息......那就是废话,但我认为我的数据库必须存在问题这是信息的来源...... 但没有 ...如果我删除查询参数并刷新页面,我仍然会收到信息填写我的userprofile的编辑字段...

  8. 所以我想,哇它第一次工作。 COOLBEANS!我看着我的数据库都很激动..然后在我创建的UserProfiles表中找到 NO ENTRY?

    那么这个数据存储在哪里才能重新调用?!?!?!

    我想也许创建的数据库是一个红色的鲱鱼,并且infact实体巧妙地在一个单独的数据库中设置了一个新表,但我的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>
    

    所以我的问题是。如果数据没有存储在我漂亮的数据库中,那么它究竟存储在哪里?

    额外信息

    UserProfileRepository:

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

    UserProfileController

    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() });
        }
    }
    

    enter image description here

    enter image description here

    数据源=(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
    

    enter image description here


    @James:我不知道,我现在真的感觉不到我的深度

    enter image description here


    @James:最有可能来自一个cookie,但为什么会发生这种情况,我还没有告诉它......至少显示

    enter image description here

1 个答案:

答案 0 :(得分:1)

您正在填充的网页有点像红色鲱鱼 - 真正的问题是您的数据实际上从未保存到数据库中 - 您的表格查看器确认了这一点。如果使用开发人员工具检查网络活动,您可能会发现服务器没有数据。

表单信息可能由浏览器本地存储(例如本地存储/ cookie),并在刷新页面时重新填充,以便出现,就像从服务器中提取数据一样 - 但是它不是:)