#asp.net-mvc-3 #entity-framework #linq-to-entities
#asp.net-mvc-3 #entity-framework #linq-to-entities
Вопрос:
У меня есть простая форма, которая создает категории с именем и списком присвоенных им автомобилей.
Все работает нормально, за исключением того факта, что для каждой записи в БД я получаю вторую запись до того, как она станет нулевой везде, кроме родительского идентификатора бренда.
[HttpPost]
public ActionResult AddNewCategory(AddNewCategoryPostViewModel categoryInfo)
{
var brand = _repository.GetBrandById(categoryInfo.BrandId);
if (categoryInfo.Name == null || categoryInfo.Cars == null)
{
if (categoryInfo.Name == null)
{
ModelState.AddModelError("Name", "The name cannot be empty.");
}
if (categoryInfo.Cars == null)
{
ModelState.AddModelError("Cars", "At least one car must be selected.");
}
var cars = _insplib.GetDevCategorysForProject((int)brand.Id);
ViewBag.Cars = cars;
ViewBag.Selectedcars = categoryInfo.Cars;
return View(new Category()
{
Brand = brand
});
}
var category = new Category()
{
DateEntered = DateTime.Now,
IsArchived = false,
Name = categoryInfo.Name,
BrandId = categoryInfo.BrandId
};
_repository.AddOrUpdateCategory(category);
// more code here added to add the cars, but not relevant to this issue.
return RedirectToRoute("Category", new { brand = category.Brand.ShortName, categoryId = category.Id });
}
Мой метод репозитория:
public Category AddOrUpdateCategory(Category category)
{
if (category.Id == 0)
_context.AddToCategorys(category);
_context.SaveChanges();
return category;
}
Как вы можете видеть, это довольно простой пост, но каждый раз, когда я создаю категорию, я получаю две записи:
ID Name DateEntered IsArchived
5 NULL NULL NULL 4
6 NewCategory 10/6/2011 False 4
Мой трюк заключался в том, чтобы просто просмотреть таблицу и удалить любую категорию, которая имеет нулевые значения в Name . Но это, очевидно, не решает актуальную проблему.
Комментарии:
1. Получает ли ваше соответствие, и
return View(new Category{});
я бы сказал, что это запись, которая сохраняется. Вы могли бы проверить мою теорию, установив одно из других свойств и посмотреть, отображается ли оно в пустой записи.2. Возможно, вы вызываете свой
Post
метод дважды. Вы проверили это с помощью точки останова?3. @Jayantha, да, это уже проверено, и этого не происходит.
4. @ChrisSainty, ты прав! Это моя проблема. Я не передаю новую категорию, а вместо этого использую ViewBag для передачи только объекта бренда, который мне нужен для заголовка и идентификатора на моей странице! Спасибо! Укажите свое решение в качестве ответа, и я отмечу его как таковой 🙂
Ответ №1:
Согласно комментариям, на самом деле ваш GET будет создавать пустую запись, когда она передает a new Category()
в представление.
Некоторые из ORM обнаруживают новые объекты и добавляют их в ваш контекст для вас. Что полезно создает запутанные проблемы, подобные этой.