Hi Guys,
If i have the following entity:
public class PocoWithDates
{
public string PocoName { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime LastModified { get; set; }
}
Which corresponds to a SQL Server 2008 table with the same name/attributes...
How can i automatically:
- Set the CreatedOn/LastModified field for the record to now (when doing INSERT)
- Set the LastModified field for the record to now (when doing UPDATE)
When i say automatically, i mean i want to be able to do this:
poco.Name = "Changing the name";
repository.Save();
Not this:
poco.Name = "Changing the name";
poco.LastModified = DateTime.Now;
repository.Save();
Behind the scenes, "something" should automatically update the datetime fields. What is that "something"?
I'm using Entity Framework 4.0 - is there a way that EF can do that automatically for me? (a special setting in the EDMX maybe?)
From the SQL Server side, i can use DefaultValue, but that will only work for INSERT's (not UPDATE's).
Similarly, i can set a default value using a constructor on the POCO's, but again this will only work when instantiating the object.
And of course i could use Triggers, but it's not ideal.
Because i'm using Entity Framework, i can hook into the SavingChanges event and update the date fields here, but the problem is i need to become "aware" of the POCO's (at the moment, my repository is implemented with generics). I would need to do some sort of OO trickery (like make my POCO's implement an interface, and call a method on that). I'm not adversed to that, but if i have to do that, i would rather manually set the fields.
I'm basically looking for a SQL Server 2008 or Entity Framework 4.0 solution. (or a smart .NET way)
Any ideas?
EDIT
Thanks to @marc_s for his answer, but i went with a solution which is better for my scenario.