Свойство item_no является частью ключевой информации объекта и не может быть изменено. Однако я не касаюсь этого свойства в обновлении вообще - PullRequest
0 голосов
/ 21 марта 2020

У меня есть таблица с уникальным индексом более 3 столбцов, и 'item_no' является одним из них. Вот мой код:

    var poItem = _poitemRepository.Table.FirstOrDefault(p => p.po_number == Data.VendinvdQry.po_number &&
             p.rel_numb == Data.VendinvdQry.rel_numb &&
             p.item_no == vendinvlnQry.item_no);

    if(poItem != null)
    {
        //_poitemRepository.Reload(poItem);
        poItem.inv_ext_cost += xAdjVal;
        _poitemRepository.Update(poItem);
    }

Неважно, что я здесь делаю, это выбрасывает ошибку. Я также пытался Метод перезапуска , и даже это выдает ту же ошибку. Что я не понимаю, так это то, что он работает для одинаковых po_number, rel_number и item_no (10, 20, 30, 40) и прерывается для того же po_number, rel_number и но для item_no = 50.

Вот сущность файл сопоставления:

public partial class PoitemMap : NopEntityTypeConfiguration<Poitem>
{
    public PoitemMap()
    {
        this.ToTable("poitem");
        this.HasKey(c => new { c.po_number, c.rel_numb, c.item_no });

        this.Property(u => u.polin_serial).HasColumnName("polin_serial");
        this.Property(u => u.locationx).HasColumnName("location");
        this.Property(u => u.job_no).HasColumnName("job_no");
        this.Property(u => u.acct_no).HasColumnName("acct_no");
        this.Property(u => u.commodity_code).HasColumnName("commodity_code");
        this.Property(u => u.po_number).HasColumnName("po_number");
        this.Property(u => u.item_no).HasColumnName("item_no").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        this.Property(u => u.vend_code).HasColumnName("vend_code");
        this.Property(u => u.vend_site).HasColumnName("vend_site");
        this.Property(u => u.vend_name).HasColumnName("vend_name");
        this.Property(u => u.product_req).HasColumnName("product_req");

            this.Property(u => u.part_code).HasColumnName("part_code");
            this.Property(u => u.v_part_number).HasColumnName("v_part_number");
            //.......
        }
    }

Вот мой метод обновления:

public virtual int Update(T entity)
{
    int affectedRows = 0;
    try
    {
        if (entity == null)
        {
            throw new ArgumentNullException("entity");
        }

        affectedRows = _context.SaveChanges();
    }
    catch (DbEntityValidationException dbEx)
    {
        var msg = GetErrorMessage(dbEx);
        var fail = new Exception(msg, dbEx);
        throw fail;
    }

    return affectedRows;
}

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

...