Entity Framework создает пустую запись в БД на POST - PullRequest
1 голос
/ 07 октября 2011

У меня есть простая форма, которая создает Категории с именем и назначенным им списком автомобилей.

Все работает отлично, за исключением того факта, что для каждой записи в БД я получаю вторую, до того как это значение будет нулевым везде, кроме родительского BrandId.

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

Как видите, это довольно простой POST, но каждый раз, когда я создаю категорию, я получаю две записи:

ID  Name    DateEntered IsArchived  
5   NULL    NULL    NULL    4
6   NewCategory 10/6/2011   False   4

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

1 Ответ

1 голос
/ 08 октября 2011

Согласно комментариям, фактически ваш GET будет создавать пустую запись, когда она передает new Category() в представление.
Некоторые из ORM обнаруживают новые объекты и добавляют их в ваш контекст для вас. Который услужливо создает беспорядочные проблемы как этот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...