2016-07-01 6 views
0

Итак, у меня довольно простая модель с довольно простым контроллером. Мой взгляд успешно передает запись TabularData на контроллер. Он проходит через движения, добавляя в контекст, затем появляется SaveChanges. Это не ошибка или что-то еще. Тем не менее, когда я проверяю базу данных, запись не существует в таблице. Почему я не могу понять, почему. Если я попытаюсь снова вставить одну и ту же запись, это даст мне ошибку нарушения ключа. Я уверен, что моя модель связана с правой базой данных, потому что если я вставляю запись в SQL, она появляется, когда я запрашиваю таблицу в Server Explorer. Похоже, что такой простой операции, но я почесал голову, пытаясь понять, что я делаю неправильно ...Почему ActionResult не сохраняет запись в базе данных?

Вот моя модель:

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

Еще одно примечание к записи: если я попытаюсь вставить запись снова через веб-приложение, это вызовет нарушение ключа. Однако, если я вручную вставляю запись в SQL Server, она не жалуется. И снова, я уверен, что модель указана на правильную БД.

+0

попробуйте добавить это в свое ключевое поле вместо того, чтобы просто [Key] '[Key, DatabaseGenerated (DatabaseGeneratedOption.None)]' – JamieD77

ответ

1

В качестве основного ключа используется User. Это добавит уникальное ограничение в таблицу. По вашему текущему дизайну вы можете иметь только одну запись для каждого пользователя.

+0

Да, все в порядке. Это тестовое решение для Sandbox, так что я крут с этим ради всего. Но я все еще не могу понять, почему запись не спасет. – Hill

+0

Вы уверены, что ваша строка подключения верна? –

+0

Ну, это должно быть потому, что если я перейду к Server Explorer, я могу увидеть мою базу данных, свою таблицу, и она запрашивает данные в реальном времени. Если я вставляю запись через SSMS, я могу вернуться к VS, сказать «Показать данные таблицы», и есть мои данные. Разве есть что-то между моделью и данными, которая искажает? Но не должно ли DbContext обрабатывать все это автоматически? – Hill

0

Я просто удалил свой проект и начал работу. На этот раз он создал классы DbContext и Data в модели. Не уверен, почему это не делалось раньше, но ... увы, это мое решение. Microsoft не может идти в ногу с моей удивительностью, поэтому я просто кивнул и начал.

Смежные вопросы