Ниже я создал демонстрационную сущность, чтобы продемонстрировать то, что я ищу:
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
или некоторые другие способы сделать это, о которых я, возможно, не знаю.
Или, если я создам свой собственный интерфейс, как могу Я использую его метод, чтобы он выполнялся в нужном мне порядке.