Wim ten Brink
Wim ten Brink

Reputation: 26682

Date/time from the database as a function in my context

I need a function in my DBContext which tells me the current date/time in the database itself.
SQL has a standard function "CURRENT_TIMESTAMP" so getting it is easy.

But I want a function ServerDateTime() in my DBContext and I'm stuck at something like:

modelBuilder.HasDbFunction(typeof(PortalContext).GetMethod(nameof(ServerDateTime), ???));

So, how do I do this? Or is there a more practical solution to solve this?

(I need the server date/time as the server will be on a different machine and my code wants to know the time difference.)

Upvotes: 0

Views: 1843

Answers (1)

Svyatoslav Danyliv
Svyatoslav Danyliv

Reputation: 27336

Define static class for your functions

public static class MyDbFunctions
{
    public static DateTime CurrentTimeStamp()
    {
        throw new NotImplementedException();
    }
}

Register CurrentTimeStamp function in DbContext

modelBuilder.HasDbFunction(() => MyDbFunctions.CurrentTimeStamp())
    .IsBuiltIn()
    .HasTranslation(e =>
    {
        return new SqlFragmentExpression("CURRENT_TIMESTAMP");
    });

Use in queries

query = query.Where(x => x.Date < MyDbFunctions.CurrentTimeStamp());

Upvotes: 1

Related Questions