Skip to content

OnDeleteTransactor has no effect when context is obtained with DbProxy.GetContext #23

@miyconst

Description

@miyconst

Reported by @Dhaigvip.

A simple scenario to reproduce the issue:

public void TriggerCallbackWhenDeleted()
{
    var transactor = CreateServices(
        s => s.Decorate<ITransactor, OnDeleteTransactor>())
        .GetRequiredService<ITransactor>();

    var wasDeleted = transactor.Transact(db =>
    {
        var p = db.Insert<Person>();

        var deleted = false;
        p.WhenDeleted(p => deleted = true);

        db.Delete(p);

        return deleted;
    });

    Assert.True(wasDeleted);

    wasDeleted = transactor.Transact(db =>
    {
        var p = db.Insert<Person>();

        var deleted = false;
        p.WhenDeleted(p => deleted = true);

        // The WhenDeleted method is not called,
        // because DbProxy.GetContext returns the original not decorated `IDatabaseContext`.
        db = DbProxy.GetContext(p);
        db.Delete(p);

        return deleted;
    });

    // This fails.
    Assert.True(wasDeleted);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions