Skip to content

DirectPersistentAccessor.SetReferenceKey change Tuple but does not register entity as modified #81

@alex-kulakov

Description

@alex-kulakov

This happens only with saved entities (ones with PersistanceState equals PersistanceState.Synchronized). New entities are already registered for following persist so any change of them will be saved anyway.

Test to reproduce the problem

    [Test]
    public void SetReferenceFieldOfExistingEntityTest()
    {
      var entityId = 0;
      var entityRefId = 0;
      using (var session = Domain.OpenSession())
      using (var t = session.OpenTransaction()) {
        var accessor = session.Services.Get<DirectPersistentAccessor>();
        var myEntity = (MyEntity) accessor.CreateEntity(typeof (MyEntity));
        entityId = myEntity.Id;
        entityRefId = new MyRefEntity().Id;
        t.Complete();
      }

      using (var session = Domain.OpenSession())
      using (var t = session.OpenTransaction()) {
        var myEntity = session.Query.All<MyEntity>().First(e => e.Id==entityId);
        var referenceEntity = session.Query.All<MyRefEntity>().First(e => e.Id==entityRefId);

        var field = myEntity.TypeInfo.Fields["Reference"];
        var accessor = session.Services.Get<DirectPersistentAccessor>();
        accessor.SetReferenceKey(myEntity, field, referenceEntity.Key);
        Assert.That(myEntity.PersistenceState, Is.EqualTo(PersistenceState.Modified));
        t.Complete();
      }

      using (var session = Domain.OpenSession())
      using (var t = session.OpenTransaction()) {
        var myEntity = session.Query.All<MyEntity>().First(e => e.Id==entityId);
        Assert.That(myEntity.Reference, Is.Not.Null);
        Assert.That(myEntity.Reference.Id, Is.EqualTo(entityRefId));
      }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions