System.Data.Entity.Infrastructure.DbUpdateConcurrencyException при попытке вставить данные в SaveChanges () - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь выполнить добавление с помощью Entity Framework.Я изменил назначение базы данных SQL на другой экземпляр, изменив тип данных некоторых столбцов (с десятичного на int / smallint).После изменения базы данных мое приложение возвращает исключение:

"Исключение типа 'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' возникло в EntityFramework.dll, но не было обработано в коде пользователя.Дополнительная информация: оператор обновления, вставки или удаления магазина затронул неожиданное количество строк (0). Возможно, объекты были изменены или удалены с момента загрузки объектов. Обновить записи ObjectStateManager. "

Некоторые частикод:

В классе 1 (Cat.T, Tip.A и Mod.L являются перечислениями):

    obj.GerarLog(Cat.T, Tip.A, Mod.L, "Some Message", cod);

В классе 2:

    public int GerarLog(Cat cat, Tip tip, Mod mod, string message, int cod)
    {
        DALEntity.TABLE_0004 nov = new DAL.Entities.TABLE_0004();

        nov.FIELD1 = DateTime.Now;
        nov.FIELD2 = (short)tip;
        nov.FIELD3 = (short)cat;
        nov.FIELD4 = (int)mod;
        nov.FIELD5 = cod;
        nov.FIELD6 = message;

        obj2.LogProcessamentoRepository.Add(nov);

        return (int)nov.FIELD0;
    }

Вclass3:

    public virtual void Add(params T[] items)
    {
        foreach (T item in items)
            context.Entry(item).State = System.Data.Entity.EntityState.Added;

        context.SaveChanges();
    }

Пространство имен DAL.Entities для TABLE_0004 содержит:

    public partial class TABLE_0004 
    {
       public long FIELD0 { get; set; }
       public System.DateTime FIELD1 { get; set; }
       public short FIELD2 { get; set; }
       public short FIELD3 { get; set; }
       public int FIELD5 { get; set; }
       public Nullable<int> FIELD4 { get; set; }
       public string FIELD6 { get; set; }

       public virtual TABLE_0094 TABLE_0094 { get; set; }
       public virtual TABLE_0000 TABLE_0000  { get; set; }
       public virtual TABLE_0003 TABLE_0003  { get; set; }
       public virtual TABLE_0011 TABLE_0011 { get; set; }

    }

В базе данных SQL только поля FIELD2 и FIELD3 являются полями SMALLINT.Я подозреваю, что есть связь по этому поводу, потому что в режиме отладки переменные «nov» не имеют значения для внешних ключей 00 (FIELD2) и 11 (FIELD3).

Остановка приложения в отладкеВ этом режиме я скопировал бы сгенерированный INSERT в SQL Management Studio, заполнил поля теми же данными Visual Studio, и он работает.

Кто-нибудь знает какой-нибудь совет, чтобы помочь мне?

...