diff --git a/BTDBTest/ObjectDBTest.cs b/BTDBTest/ObjectDBTest.cs index 0aa130a2..c92e67db 100644 --- a/BTDBTest/ObjectDBTest.cs +++ b/BTDBTest/ObjectDBTest.cs @@ -2934,4 +2934,43 @@ public void CanRemovePropertyTogetherWithClass() Assert.Equal(42, root.I); } } + + public interface IFace + { + int I { get; set; } + } + + public class ObjFace: IFace + { + public int I { get; set; } + } + + public class RootObj + { + public IFace O { get; set; } + public int I { get; set; } + } + + [Fact] + public void CanRemoveDerivedClassWhenPropertyWithBaseClassExists() + { + _db.RegisterType(typeof(RootObj)); + _db.RegisterType(typeof(ObjFace)); + using (var tr = _db.StartTransaction()) + { + var root = tr.Singleton(); + root.I = 42; + root.O = new ObjFace { I = 5 }; + tr.Commit(); + } + + ReopenDb(); + _db.RegisterType(typeof(RootObj)); + using (var tr = _db.StartTransaction()) + { + var root = tr.Singleton(); + Assert.Equal(42, root.I); + Assert.Null(root.O); + } + } } diff --git a/BTDBTest/ObjectDbTableUpgradeTest.cs b/BTDBTest/ObjectDbTableUpgradeTest.cs index e64f61c9..1ce923a0 100644 --- a/BTDBTest/ObjectDbTableUpgradeTest.cs +++ b/BTDBTest/ObjectDbTableUpgradeTest.cs @@ -1061,4 +1061,50 @@ public void CanRemovePropertyTogetherWithClass() Assert.Equal(43, root.After); } } + + public interface IFace + { + int I { get; set; } + } + + public class ObjFace: IFace + { + public int I { get; set; } + } + + public class RootObj + { + public IFace O { get; set; } + public int I { get; set; } + } + + public interface IRootObjTable : IRelation + { + } + + [Fact] + public void CanRemoveDerivedClassWhenPropertyWithBaseClassExists() + { + _db.RegisterType(typeof(ObjFace)); + using (var tr = _db.StartTransaction()) + { + var t = tr.GetRelation(); + var root = new RootObj + { + I = 42, + O = new ObjFace { I = 5 } + }; + t.Upsert(root); + tr.Commit(); + } + + ReopenDb(); + using (var tr = _db.StartTransaction()) + { + var t = tr.GetRelation(); + var root = t.First(); + Assert.Equal(42, root.I); + Assert.Null(root.O); + } + } }