Сначала вставьте, не сохраняя код EF 4.1 - PullRequest
2 голосов
/ 07 августа 2011

У меня здесь проблема, которая поражает меня.Это очень простая вставка в очень простую таблицу ... что-то, что я делал тысячу раз, но почему-то здесь не работает.

По сути, я запускаю простую INSERT (черезшаблон репозитория), а затем сохранение изменений контекста.Там нет ошибок, я могу пройти через это просто отлично, но записи просто нет в базе данных.

В интересах (надеюсь) прикрыть мою задницу от глупости: я знаю, что я подключен к правильной базе данных, потому что она очень хорошо выбирает начальные данные (и в моем приложении только 1 строка подключения).Кроме того, я знаю, что база данных не перестраивается каждый раз.

Вот код вызова:

var result = new Core.Models.Poll
{
    ElectionId = electionId,
    DatePublished = pubDate,
    DateCreated = DateTime.Now,
    NameEn = nameEn,
    NameFr = nameFr,
    Params = splitVals,
    Url = url,
    Slug = String.Empty
};    

Components.PollRepository.Insert(result);
Components.PollRepository.Save();

А вот методы в хранилище:

public void Insert(Poll poll)
{
    Context.Polls.Add(poll);
}

public void Save()
{
    Context.SaveChanges();
}

В строке Context.Polls.Add(poll); я проверяю свой объект ... когда я вручную запускаю оператор вставки в SSMS, используя значения в опросе, запись создается без проблем.Когда я запускаю Context.Entry(poll) на следующей строке (}), то вижу, что его состояние добавлено (как и ожидалось).

Я запускаю это с помощью IIS Express на моем локальном компьютере разработчика противSQLEXPRESS.

О, и вот ключ класса Poll (я безуспешно попробовал этот атрибут DatabaseGenerated):

[Key]
//[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

Любая помощь или что-либо еще, что можно попробовать,с благодарностью.

1 Ответ

2 голосов
/ 07 августа 2011

Проверьте объявление переменной Context в PollReppsitory. Также проверьте свойство PollRepository в компонентах. Убедитесь, что один и тот же экземпляр возвращается каждый раз.

Вы увидите эти результаты, если экземпляр Context, использованный для сохранения изменений, не является тем, который использовался для вставки.

Вы проверили состояние объекта в методе Insert. Я бы сделал то же самое в методе Save. Если объект существует и находится в состоянии new, вы можете исключить мое предположение, что вставка и сохранение выполняются в разных контекстах.

...