in Структура сущности, как вызвать метод сущности перед сохранением

Ниже я создал демонстрационную сущность, чтобы продемонстрировать то, что я ищу:

public class User :  IValidatableObject
{
    public string Name { get; set; }

    [Required]
    public DateTime CreationDate { get; set; }

    public DateTime UpdatedOnDate { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if(Name = "abc")
        {
            yield return new ValidationResult("please choose any other name then abc", new[] { "Name" });
        }
    }
}

Я реализую интерфейс IValidatableObject , чтобы сделать эту сущность самопроверкой.

Сейчас, чтобы создать нового пользователя, я делаю это

User u = new User();
u.Name = "Some name";
u.CreationDate = DateTime.Now
dbContext.Users.Add(u);
dbContext.SaveChanges();

Я планирую перенести код u.CreationDate = DateTime.Now; внутри класса User . И реализовать интерфейс, который предоставляет метод, который будет выполняться перед сохранением и после проверки

// class structure that I am looking for
public class User : IValidatableObject,IMyCustomInterFace
{
    //rest codes as above class

    public void MyMethod(Whatever)
    {
        //this method gets called after Validate() and before save

        if(dataContext.Entry<User>(this).State == System.Data.EntityState.Added)
        {
            //add creation date_time
            this.CreationDate=DateTime.Now;

            //SET MORE DEFAULTS
        }

        if(dataContext.Entry<User>(this).State == System.Data.EntityState.Modified)
        {
            //update Updation time
            this.UpdatedOnDate = DateTime.Now;
        }
    }
}

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

User u = new User();
u.Name = "Some name";
dbContext.Users.Add(u);
dbContext.SaveChanges();

Чтобы обновить пользователя, свойство UpdatedOnDate будет автоматически обновлено классом

User u = getUserFromSomeWhere();
u.Name = "Updated Name";
dataContext.Entry<User>(u).State = System.Data.EntityState.Modified;
dbContext.SaveChanges();

Мой вопрос : существует ли какой-либо существующий интерфейс, который предоставляет какой-то метод, который вызывается до Save и AfterValidate или некоторые другие способы сделать это, о которых я, возможно, не знаю.

Или, если я создам свой собственный интерфейс, как могу Я использую его метод, чтобы он выполнялся в нужном мне порядке.

12
задан Massimiliano Kraus 23 February 2018 в 14:12
поделиться