Не могу увидеть изменения в базе данных после того, как SaveChanges() вызвал структуру сущности

У меня есть таблица Device только с одним столбцом UID nvarchar(128), и вот моя сущность:

[Table( Name="Device" )]
public class Device
{
    [Key]
    public string UID { get; set; }
}

Когда я пытаюсь вставить объект и зафиксировать изменения в базе данных, все в порядке. Но в базу данных не добавляются новые строки. Если я попытаюсь повторить эту операцию с тем же UID - я получаю ошибку

Нарушение ограничения PRIMARY KEY "PK_dbo.Devices". Не удается вставить повторяющийся ключ в объект «dbo.Devices». Повторяющееся значение ключа...

Что случилось?

ИЗМЕНИТЬ:

Вот мой контекст:

public class DeviceContext :  BaseDbContext, IDbContext
{
    public DbSet<Entity.Device> Device { get; set; }

    public new IDbSet<T> Set<T>() where T : class
    {
        return base.Set<T>();
    }

    public int SaveChanges()
    {
        return base.SaveChanges();
    }

    public void Dispose()
    {
        base.Dispose();
    }
}

Не работает SaveChanges() метод. BaseDbContext - это только "уровень строки подключения".

DeviceContext context = new DeviceContext();
context.Device.Add(new Device() { UID = id });
context.SaveChanges();

person Anton Putov    schedule 15.03.2013    source источник
comment
покажите код который не работает   -  person Jens Kloster    schedule 15.03.2013
comment
хорошо - где вы используете DeviceContext - код, где вы добавляете больше устройств   -  person Jens Kloster    schedule 15.03.2013
comment
я обновил вопрос   -  person Anton Putov    schedule 15.03.2013
comment
Вы проверили, что значение id еще не существует в базе данных?   -  person Jens Kloster    schedule 15.03.2013


Ответы (1)


Ошибка говорит, что данные уже сохранены. Поэтому я думаю, что вы смотрите на неправильную базу данных. Проверьте строку подключения, которая используется вашим DbContext.

Кстати, вы можете увидеть, какое соединение используется, просмотрев свойство context.Database.Connection.ConnectionString в отладчике.

person Sergey Berezovskiy    schedule 15.03.2013
comment
Было две проблемы: первая - я использовал DataAccessLayer в нескольких проектах - (WebUI и WebApi [MVC4]). В WebUI у меня была строка подключения в .config - в WebApi нет (я думаю, entityframework создает временную базу данных в случае, когда строка подключения не нашел. это объясняет, почему я не получил ошибку). во-вторых, базы данных в визуальном дизайнере и студии управления были разными. - person Anton Putov; 15.03.2013
comment
@AntonPutov Однажды у меня были такие же проблемы из-за разных конфигураций отладки и выпуска :) Кстати, если строка подключения не указана, то EF не использует временную базу данных - он просто создает базу данных на сервере SQLEXPRESS с именем, равным имени DbContext. - person Sergey Berezovskiy; 15.03.2013