Значение ID изменяется при добавлении в базу данных, отличается от опубликованных и отправленных значений - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть форма, которая создает новый бренд.Пользователь выбирает название, изображение и URL-адрес веб-сайта для бренда и отправляет хиты.Сценарий редактирования работает так же.Проблема, с которой я сталкиваюсь, заключается в том, что при создании нового бренда публикуется правильный imageId, и вплоть до SaveChanges () в моих действиях это правильно.Когда я проверяю новую строку в базе данных, идентификатор удваивается, а затем некоторые.(например, если я отправлю 37, база данных изменит его на 78, 38 на 80 и т. д.) Я в тупике, почему это происходит.Вот мое действие:

    [HttpPost]
    public ActionResult NewBrand(Brand brand)
    {
        try
        {
            brand.BrandName = Request.Form["BrandName"];
            brand.BrandImageId = int.Parse(Request.Form["Image.ImageId"]);
            brand.BrandWebsite = Request.Form["BrandWebsite"];

            _entities.Brands.AddObject(brand);
            _entities.SaveChanges();

            return RedirectToAction("Brands");
        }
        catch (Exception ex)
        {
            var script = "alert(" + ex.Message + ")";

            return JavaScript(script);
        }
    }

И вот пример POST от firebug

Parametersapplication/x-www-form-urlencoded
BrandName    Sample Brand
BrandWebsite    www.somewebsite.com
Image.ImageId    37
Source
Content-Type: application/x-www-form-urlencoded Content-Length: 72 
BrandName=Sample+Brand&Image.ImageId=37&BrandWebsite=www.somewebsite.com

Я использую структуру сущностей и построил свою базу данных с помощью мастеров в Visual Studio.Моя таблица брендов имеет внешний ключ ImageId, и у меня есть таблица изображений с первичным ключом ImageId, они имеют отношение один ко многим.Есть идеи?

edit

Я создал объект каркаса сущности, щелкнув правой кнопкой мыши по папке с моими моделями и добавив новый файл .edmx.А затем я щелкнул правой кнопкой мыши в представлении конструктора и нажал «обновить из базы данных», и он создал модель из таблиц, которые я создал.Я не выполнил никакой специальной настройки или настройки, кроме того, я не использую шаблон хранилища (да, это означает, что у меня есть код доступа к данным в моих контроллерах, я рефакторинг на этих выходных), который я узнал после запуска этого проекта.

_entities идет от этой строки вверху контроллера

private MHNHubEntities _entities = new MHNHubEntities(); 

Ответы [ 2 ]

0 голосов
/ 21 октября 2010

Я в конечном итоге решил проблему, просмотрев изображение с помощью идентификатора изображения, а затем присвоив это изображение свойству BrandImage вместо назначения идентификатора BrandImageID, который добавлял новое пустое изображение в базу данных.

0 голосов
/ 29 сентября 2010

ObjectContext реализует IDisposable, поэтому вы неправильно используете объект MHNHubEntities.Попробуйте соответствующим образом изменить свой код и посмотреть, решит ли он проблему.

[HttpPost]
public ActionResult NewBrand(Brand brand)
{
    try
    {
        brand.BrandName = Request.Form["BrandName"];
        //brand.BrandImageId = int.Parse(Request.Form["Image.ImageId"]); // edited out
        brand.BrandWebsite = Request.Form["BrandWebsite"];

        using (var _entities = new MHNHubEntities())
        {
            // Edited in
            brand.BrandImage = _entities.
                                BrandImages.
                                FirstOrDefault(i => 
                                  i.Id == int.Parse(Request.Form["Image.ImageId"]));

            _entities.Brands.AddObject(brand);
            _entities.SaveChanges();
        }

        return RedirectToAction("Brands");
    }
    catch (Exception ex)
    {
        var script = "alert(" + ex.Message + ")";

        return JavaScript(script);
    }
}
...