Entity Framework Database First Generalising Timestamps

Using Entity Framework is extremely easy and straight forward unless you have a large amount of entities and business rules to apply. You are lucky if you have a code first approach, however some times database first approach is in place and there are some limitations. For example, as the DbContext is autogenerated using T4, it is hard to introduce general behaviours, like updating CreatedAt, UpdatedAt and DeletedAt properties globally upon saving.

There could be different solutions for the problem I mentioned earlier, however there is a simple one that may work as well. Since all auto-generated files by EntityFramework marked as partial, we could easily extend them. Lets start!

First of all we need to make all autogenerated entities to extend an interface with our 3 properties: CreatedAt, UpdatedAt & DeletedAt. After that we have to extend our DbContext and override the SaveChangesAsync method, so it will fill the properties according to user actions. Here is the source:

Advantages:

  • Global rule, applied to all the entities in the system.
  • Logic in one place.

Disadvantages:

  • All the entities has to be manually defined in partial class and extend IEntity. Can be a pain if you have a lot of entities.
  • Can be tricky to maintain. As the system grows, it will be easy to forget the first step in this list.

This approach is not perfect but might be useful in some cases. The point of this post was to remind you that partial classes can be a very powerful tool and that you could apply code first recipes even with db first approach.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s