dataobjects-net icon indicating copy to clipboard operation
dataobjects-net copied to clipboard

Entity not persisted to the storage in the corner case

Open letarak opened this issue 7 months ago • 0 comments

Hi there

DO 7.1.5

When entity created and SaveChanges not triggered and exception thrown on query translation

internal class Program
{
    private static void Main(string[] args)
    {
        var currentConnection =
            new SqlConnectionStringBuilder(DbHelper.ConnectionString());

        var dc = new DomainConfiguration("sqlserver", currentConnection.ToString());

        dc.Types.Register(typeof(TestEntity));

        dc.UpgradeMode = DomainUpgradeMode.Recreate;

        using var d = Domain.Build(dc);
        using var s = d.OpenSession();
        using var a = s.Activate();
        using var t = s.OpenTransaction();

        var item = new TestEntity(s, 123)
        {
            Name = "test"
        };

        // OK WHEN
        // s.SaveChanges();
        
        try
        {
            Expression<Func<TestEntity, bool>> expression = it => Query.All<TestEntity>()
                .Where(e => e.Name == it.Name)
                .Contains(it);

            expression.Compile().Invoke(null);
        }
        catch (Exception e)
        {
            // System.NullReferenceException in Xtensive.Orm.Providers.CommandFactory.GetParameterValue
            Console.WriteLine(e);
        }
                
        Assert.NotNull(item);
        Assert.AreEqual(1, Query.All<TestEntity>().Count(it => it.Id == item.Id));
    }

    [HierarchyRoot]
    public class TestEntity : Entity
    {
        public TestEntity(Session session, int id) 
            : base(session, id)
        {
        }

        [Key] [Field] public int Id { get; private set; }

        [Field] public string Name { get; set; }
    }
}

letarak avatar Jun 20 '25 11:06 letarak