当前位置: 首页 > 编程语言 > C#

在实体框架中,如何在保存前调用实体上的方法分享

时间:2023-04-10 13:42:01 C#

寻找:公共类用户:IValidatableObject{公共字符串名称{get;放;}[必需]publicDateTimeCreationDate{get;放;}publicDateTimeUpdatedOnDate{得到;放;}publicIEnumerableValidate(ValidationContextvalidationContext){if(Name="abc"){yieldreturnnewValidationResult("请选择除abc之外的任何其他名称",new[]{"Name"});我正在实现IValidatableObject接口来使这个实体自我验证。现在创建新用户我正在做这个Useru=newUser();u.Name="某个名字";u.CreationDate=DateTime.NowdbContext.Users.Add(u);dbContext.SaveChanges();调用u.CreationDate=DateTime.Now;用户类中的代码。并实现一个接口,该接口提供将在保存之前和验证之后执行的方法//我正在寻找的类结构publicclassUser:IValidatableObject,IMyCustomInterFace{//其余代码同上classpublicvoidMyMethod(Whatever){//this方法在Validate()之后和保存之前被调用//SETMOREDEFAULTS}if(dataContext.Entry(this).State==System.Data.EntityState.Modified){//update更新时间this.UpdatedOnDate=DateTime.Now;现在我只需要创建一个新用户,请注意我这次没有添加日期属性,Class会自动添加。用户u=newUser();u.Name="某个名字";dbContext.Users.Add(u);dbContext.SaveChanges();要更新用户,UpdatedOnDate类会自动更新UpdatedOnDate属性Useru=getUserFromSomeWhere();u.Name="更新后的名字";dataContext.Entry(u).State=System.Data.EntityState.Modified;dbContext.SaveChanges();我的问题:有没有现成的接口提供一些在Save和AfterValidate之前调用的方法或者其他一些方法,我可能不知道。或者,如果我创建了一个自定义接口,我该如何让它的方法按照我想要的顺序执行。我遇到了几乎相同的情况,我通过处理上下文中的SavingChanges事件来管理它。首先,我创建了一个定义时间戳操作的接口:publicinterfaceIHasTimeStamp{voidDoTimeStamp();然后我在我的实体中实现这个接口:PublicclassUser:IHasTimeStamp(publicvoidDoTimeStamp(){if(dataContext.Entry(this).State==System.Data.EntityState.Added){//addcreationdate_timethis.CreationDate=DateTime.Now;}if(dataContext.Entry(this).State==System.Data.EntityState.Modified){//update更新时间this.UpdatedOnDate=DateTime.Now;}}}最后一步是注册SavingChanges处理程序并实现它。以上就是C#学习教程:在Entity框架中,如何在保存之前调用Entity上的方法分享所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——publicpartialclassMyEntities{partialvoidOnContextCreated(){//注册SavingChanges事件的处理函数。this.SavingChanges+=newEventHandler(context_SavingChanges);}//SavingChanges事件处理程序。privatestaticvoidcontext_SavingChanges(objectsender,EventArgse){//在SaveChanges成功之前验证上下文中每个实体的状态。foreach(ObjectStateEntryentryin((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries(EntityState.Added|EntityState.Modified)){if(!entry.IsRelationship&&(entry.EntityisIHasTimeStamp)){(entry.EntityasIHasTimeStamp).做时间戳();}}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: