【发布时间】:2011-07-13 10:00:48
【问题描述】:
下面我创建了一个演示实体来演示我在寻找什么:
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;
}
}
}
现在要创建一个新用户,我只需要按以下方式进行操作,注意我这次没有添加日期属性,Class 会自动添加。
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 之前调用的某些方法或其他一些我可能不知道的方法。
或者,如果我创建了我的自定义接口,我怎样才能让它的方法按照我想要的顺序执行。
【问题讨论】:
-
您可能想看看 SavingChanges 事件:msdn.microsoft.com/en-us/library/cc716714.aspx
-
我已经看到了,但这并不能满足我的要求。
标签: c# entity-framework ef-code-first entity-framework-4.1