为什么ActionResult不会将记录保存到数据库?

时间:2016-07-01 17:34:50

标签: .net asp.net-mvc entity-framework

所以,我有一个相当简单的模型,有一个相当简单的控制器。我的视图成功将TabularData记录传递给Controller。它经历了添加到上下文的动作,然后出现在SaveChanges中。它没有错误或任何东西。但是,当我检查数据库时,表中不存在记录。我不能为我的生活找出原因。如果我再次尝试插入相同的记录,它会给我一个密钥违规错误。我确定我的模型已连接到正确的数据库,因为如果我将一条记录插入SQL,它会在我查询VS的服务器资源管理器中的表时出现。这似乎是一个简单的操作,但我正在试图弄清楚我做错了什么......

这是我的模特:

namespace ReflectionProject.Models
{
    public class TabularData
    {
        [Key]
        public string User { get; set; }
        public string Choice1 { get; set; }
        public string Choice2 { get; set; }
        public string Choice3 { get; set; }
        public string Choice4 { get; set; }
        public string Choice5 { get; set; }
    }

    public class SandboxDBContext : DbContext
    {
        public DbSet<TabularData> TabularDatas { get; set; }
    }
}

这是控制器:

namespace ReflectionProject.Controllers
{

    public class HomeController : Controller
    {
        private SandboxDBContext db = new SandboxDBContext();
        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public string Index(TabularData td)
        {
            db.TabularDatas.Add(td);
            db.SaveChanges();
            return "Thanks!";
        }
    }
}

记录的另一个注意事项:如果我尝试通过Web应用程序再次插入记录,则会引发密钥违规。但是,如果我手动在SQL Server中插入记录,它不会抱怨。而且,我确信模型指向了正确的数据库。

2 个答案:

答案 0 :(得分:1)

您使用User作为主键。这将为表添加一个唯一约束。根据您目前的设计,每个用户只能有一条记录。

答案 1 :(得分:0)

我刚刚删除了我的项目并重新开始。这次,它在模型中创建了DbContext和Data类。不知道为什么之前没有这样做,但是......唉,这是我的解决方案。微软无法跟上我的精彩,所以我只是努力了并重新开始。