c# - in Entity framework, how to call a method on Entity before saving -



c# - in Entity framework, how to call a method on Entity before saving -

below have created demo entity demonstrate iam looking for

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 homecoming new validationresult("please take other name abc", new[] { "name" }); } } }

i implementing ivalidatableobject interface create entity selfvalidating.

now create new user iam doing this

user u= new user(); u.name="some name"; u.creationdate=datetime.now dbcontext.users.add(u); dbcontext.savechanges();

iam planning shift u.creationdate=datetime.now; code within user class. , implement interface provides method executed before saving , after validating

// class construction iam looking public class user : ivalidatableobject,imycustominterface { //rest codes above class public void mymethod(whatever) { //this method gets called after validate() , 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; } } }

now create new user have below, note didnt added date property time, class automatically

user u= new user(); u.name="some name"; dbcontext.users.add(u); dbcontext.savechanges();

to update user, updatedondate property automatically updated class

user u= getuserfromsomewhere(); u.name="updated name"; datacontext.entry<user>(u).state = system.data.entitystate.modified; dbcontext.savechanges();

my question: there existing interface provides method gets called before save , after validate or other ways of doing this, may not knowing.

or if create custom interface how can create method executed in order looking for

i have identical situation , manage handling savingchanges event on context.

first create interface defines timestamping operations:

public interface ihastimestamp { void dotimestamp(); }

then implement interface in entities:

public class user : ihastimestamp ( public void dotimestamp() { if(datacontext.entry<user>(this).state == system.data.entitystate.added) { //add creation date_time this.creationdate=datetime.now; } if(datacontext.entry<user>(this).state == system.data.entitystate.modified) { //update updation time this.updatedondate=datetime.now; } } }

the final step register savingchanges handler , implement it.

public partial class myentities { partial void oncontextcreated() { // register handler savingchanges event. this.savingchanges += new eventhandler(context_savingchanges); } // savingchanges event handler. private static void context_savingchanges(object sender, eventargs e) { // validate state of each entity in context // before savechanges can succeed. foreach (objectstateentry entry in ((objectcontext)sender).objectstatemanager.getobjectstateentries(entitystate.added | entitystate.modified)) { if (!entry.isrelationship && (entry.entity ihastimestamp)) { (entry.entity ihastimestamp).dotimestamp(); } } } }

c# entity-framework ef-code-first entity-framework-4.1

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -