Entity Framework Code первые пользовательские свойства

Сначала я использую код структуры сущностей вместе с контроллерами OData в приложении spa, для своих составных таблиц (например: Personnel -> PayRolls) я добавил два свойства в частичный класс с атрибутом NotMapped. так как я использую их позже при сохранении изменений. я проверяю, была ли запись удалена или изменена на стороне клиента или нет для сохранения в базе данных.

частичный класс:

 public partial class PayRoll
{
    [NotMapped]
    public bool IsDirty { get; set; }

    [NotMapped]
    public bool IsDeleted { get; set; }
}

если я не добавляю атрибут NotMapped во время загрузки данных, я получаю исключение sql, которое показывает неверное имя столбца 'IsDirty'.\r\n Неверное имя столбца 'IsDeleted. поэтому я добавляю атрибут NotMapped, чтобы понять, что они не являются полями таблицы базы данных.

но во время сохранения данных я получил ошибку, которая показывает: Свойство IsDirty не существует по типу Template.CodeFirst.PayRoll. Убедитесь, что вы используете только те свойства, которые определены типом. Сначала он хорошо работал с базой данных сущности (файл.edmx).

метод Put для oDataController:

 // PUT: odata/Hrm_Personnels(5)
     [CheckKey("hrm.Personnels.Edit")]
    public IHttpActionResult Put([FromODataUri] int key, Personnel personnel)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (key != personnel.Id)
        {
            return BadRequest();
        }

        foreach (var payroll in personnel.PayRolls)
        {
            if (payroll.IsDirty)

                db.Entry(payroll).State = (payroll.ID > 0) ? EntityState.Modified : EntityState.Added;

           if (payroll.IsDeleted)

                db.Entry(payroll).State = EntityState.Deleted;
        }

        db.SaveChanges();

        db.Entry(personnel).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!PersonnelExists(key))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return Updated(personnel);
    }

заранее спасибо

1 ответ

На самом деле первый комментарий является правильным ответом, и с помощью приведенного ниже кода и удаления атрибутов NotMapped из свойств IsDirty и IsDeleted проблема решена.

 modelBuilder.Entity<PayRoll>().Ignore(c => c.IsDirty);
        modelBuilder.Entity<PayRoll>().Ignore(c => c.IsDeleted);
Другие вопросы по тегам