From 55cf49571025ef8ed03c22ebccf3635d801aa6d0 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Wed, 7 Oct 2020 23:09:18 +1300 Subject: [PATCH 1/5] Update GitReleaseManager to 0.11.0 --- build.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.cake b/build.cake index 3e7167a41..9ceaaff33 100644 --- a/build.cake +++ b/build.cake @@ -1,7 +1,7 @@ #addin "Cake.FileHelpers" #tool "nuget:?package=NUnit.ConsoleRunner&version=3.8.0" #tool "nuget:?package=Machine.Specifications.Runner.Console&version=0.9.3" -#tool "nuget:?package=GitReleaseManager&version=0.5.0" +#tool "nuget:?package=GitReleaseManager&version=0.11.0" #tool "nuget:?package=GitVersion.CommandLine&version=3.6.2" #load "./build/parameters.cake" From 85a68393bc346bf76b8951f1c1d2c2cf71858b07 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 8 Oct 2020 13:23:15 +1300 Subject: [PATCH 2/5] Remove unused tools from Cake script +semver:patch --- build.cake | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/build.cake b/build.cake index 9ceaaff33..c1404dada 100644 --- a/build.cake +++ b/build.cake @@ -1,6 +1,4 @@ #addin "Cake.FileHelpers" -#tool "nuget:?package=NUnit.ConsoleRunner&version=3.8.0" -#tool "nuget:?package=Machine.Specifications.Runner.Console&version=0.9.3" #tool "nuget:?package=GitReleaseManager&version=0.11.0" #tool "nuget:?package=GitVersion.CommandLine&version=3.6.2" @@ -83,18 +81,6 @@ Task("Test") var specProjects = GetFiles("./src/**/*.Specs.csproj"); var testProjects = unitProjects.Union(specProjects).ToArray(); - // foreach (var framework in frameworks) - // { - // var testAssemblies = $"./src/**/bin/{parameters.Configuration}/{framework}/*.Testing.dll"; - // NUnit3(testAssemblies, new NUnit3Settings { - // NoResults = true - // }); - - // testAssemblies = $"./src/**/bin/{parameters.Configuration}/{framework}/*.Specs.dll"; - // MSpec(testAssemblies, new MSpecSettings { - // Silent = true - // }); - // } foreach(var project in testProjects) { DotNetCoreTest(project.ToString(), new DotNetCoreTestSettings From e7edaba1baa83f2b72854349ca697d86fdd3a0d7 Mon Sep 17 00:00:00 2001 From: Alexander Zaytsev Date: Fri, 9 Oct 2020 14:52:08 +1300 Subject: [PATCH 3/5] Update Cake (#473) * Update Cake to 0.38.5 * Update GitVersion.CommandLine to 5.3.7 +semver:patch --- GitVersion.yml | 2 +- build.cake | 4 ++-- tools/packages.config | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/GitVersion.yml b/GitVersion.yml index b711b4ac1..bf301fde6 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -6,7 +6,7 @@ branches: increment: Patch prevent-increment-of-merged-branch-version: true track-merge-target: false - dev(elop)?(ment)?$: + develop: mode: ContinuousDeployment tag: alpha increment: Minor diff --git a/build.cake b/build.cake index c1404dada..bcf8b88a7 100644 --- a/build.cake +++ b/build.cake @@ -1,6 +1,6 @@ #addin "Cake.FileHelpers" #tool "nuget:?package=GitReleaseManager&version=0.11.0" -#tool "nuget:?package=GitVersion.CommandLine&version=3.6.2" +#tool "nuget:?package=GitVersion.CommandLine&version=5.3.7" #load "./build/parameters.cake" @@ -294,4 +294,4 @@ private void PackProjects( IncludeSymbols = true }); } -} \ No newline at end of file +} diff --git a/tools/packages.config b/tools/packages.config index 1d2d15349..74ddeff42 100644 --- a/tools/packages.config +++ b/tools/packages.config @@ -1,4 +1,4 @@ - + From 3b66ce6ae634751fcb8506986a8c0d368d51fb03 Mon Sep 17 00:00:00 2001 From: Alexander Zaytsev Date: Fri, 9 Oct 2020 21:08:49 +1300 Subject: [PATCH 4/5] Fix Cascade.DeleteOrphan (#474) +semver:fix --- .../DomainModel/Mapping/CascadeExpressionTester.cs | 2 +- src/FluentNHibernate/Mapping/CascadeExpression.cs | 11 ++++++++++- .../Mapping/CollectionCascadeExpression.cs | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/FluentNHibernate.Testing/DomainModel/Mapping/CascadeExpressionTester.cs b/src/FluentNHibernate.Testing/DomainModel/Mapping/CascadeExpressionTester.cs index 7f2be6bb3..56ea76d98 100644 --- a/src/FluentNHibernate.Testing/DomainModel/Mapping/CascadeExpressionTester.cs +++ b/src/FluentNHibernate.Testing/DomainModel/Mapping/CascadeExpressionTester.cs @@ -73,7 +73,7 @@ public void Refresh_should_add_the_correct_cascade_attribute_to_the_parent_part( [Test] public void DeleteOrphans_should_add_the_correct_cascade_attribute_to_the_parent_part() { - A_call_to(_cascade.DeleteOrphans).should_set_the_cascade_value_to("delete-orphans"); + A_call_to(_cascade.DeleteOrphan).should_set_the_cascade_value_to("delete-orphan"); } [Test] diff --git a/src/FluentNHibernate/Mapping/CascadeExpression.cs b/src/FluentNHibernate/Mapping/CascadeExpression.cs index fbf0acaa1..1a5eb794f 100644 --- a/src/FluentNHibernate/Mapping/CascadeExpression.cs +++ b/src/FluentNHibernate/Mapping/CascadeExpression.cs @@ -88,9 +88,18 @@ public TParent Refresh() /// /// Cascade deletes orphans /// + [Obsolete("Please use DeleteOrphan instead")] public TParent DeleteOrphans() { - setter("delete-orphans"); + return DeleteOrphan(); + } + + /// + /// Cascade deletes orphans + /// + public TParent DeleteOrphan() + { + setter("delete-orphan"); return parent; } diff --git a/src/FluentNHibernate/Mapping/CollectionCascadeExpression.cs b/src/FluentNHibernate/Mapping/CollectionCascadeExpression.cs index 229c97d1e..2261568f9 100644 --- a/src/FluentNHibernate/Mapping/CollectionCascadeExpression.cs +++ b/src/FluentNHibernate/Mapping/CollectionCascadeExpression.cs @@ -26,7 +26,7 @@ public CollectionCascadeExpression(TParent parent, Action setter) /// /// Cascade deletes, deleting any orphaned records /// - public TParent DeleteOrphan() + public new TParent DeleteOrphan() { setter("delete-orphan"); return parent; From e4c6e1667173a2f5bc7961af4cb34579d732e275 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Fri, 9 Oct 2020 21:35:47 +1300 Subject: [PATCH 5/5] Fix combining cascades Fixes #472 +semver:fix --- .../AnyMutablePropertyModelGenerationTests.cs | 12 +++++++++++ ...pingMutablePropertyModelGenerationTests.cs | 8 ++++++++ ...ManyMutablePropertyModelGenerationTests.cs | 8 ++++++++ ...oOneMutablePropertyModelGenerationTests.cs | 20 +++++++++++++++++-- src/FluentNHibernate/Mapping/AnyPart.cs | 6 +++++- .../Mapping/HibernateMappingPart.cs | 6 +++++- src/FluentNHibernate/Mapping/OneToManyPart.cs | 8 +------- src/FluentNHibernate/Mapping/OneToOnePart.cs | 6 +++++- src/FluentNHibernate/Mapping/ToManyBase.cs | 6 +++++- 9 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/FluentNHibernate.Testing/FluentInterfaceTests/AnyMutablePropertyModelGenerationTests.cs b/src/FluentNHibernate.Testing/FluentInterfaceTests/AnyMutablePropertyModelGenerationTests.cs index 7b420063c..5ebebcd9b 100644 --- a/src/FluentNHibernate.Testing/FluentInterfaceTests/AnyMutablePropertyModelGenerationTests.cs +++ b/src/FluentNHibernate.Testing/FluentInterfaceTests/AnyMutablePropertyModelGenerationTests.cs @@ -33,6 +33,18 @@ public void CascadeSetsModelCascadePropertyToValue() .ModelShouldMatch(x => x.Cascade.ShouldEqual("all")); } + [Test] + public void CascadeAppendModelCascadePropertyToValue() + { + Any() + .Mapping(m => m + .IdentityType() + .EntityIdentifierColumn("col") + .EntityTypeColumn("col2") + .Cascade.Merge().Cascade.SaveUpdate()) + .ModelShouldMatch(x => x.Cascade.ShouldEqual("merge,save-update")); + } + [Test] public void IdentityTypeSetsModelIdTypePropertyToPropertyTypeName() { diff --git a/src/FluentNHibernate.Testing/FluentInterfaceTests/HibernateMappingMutablePropertyModelGenerationTests.cs b/src/FluentNHibernate.Testing/FluentInterfaceTests/HibernateMappingMutablePropertyModelGenerationTests.cs index c0c943957..747789552 100644 --- a/src/FluentNHibernate.Testing/FluentInterfaceTests/HibernateMappingMutablePropertyModelGenerationTests.cs +++ b/src/FluentNHibernate.Testing/FluentInterfaceTests/HibernateMappingMutablePropertyModelGenerationTests.cs @@ -37,6 +37,14 @@ public void DefaultCascadeShouldSetModelDefaultCascadePropertyToValue() .ModelShouldMatch(x => x.DefaultCascade.ShouldEqual("all")); } + [Test] + public void DefaultCascadeShouldAppendModelDefaultCascadePropertyToValue() + { + HibernateMapping() + .Mapping(m => { m.DefaultCascade.Merge(); m.DefaultCascade.SaveUpdate(); }) + .ModelShouldMatch(x => x.DefaultCascade.ShouldEqual("merge,save-update")); + } + [Test] public void DefaultLazyShouldSetModelDefaultLazyPropertyToTrue() { diff --git a/src/FluentNHibernate.Testing/FluentInterfaceTests/ManyToManyMutablePropertyModelGenerationTests.cs b/src/FluentNHibernate.Testing/FluentInterfaceTests/ManyToManyMutablePropertyModelGenerationTests.cs index b78aa9de8..edc17a8b9 100644 --- a/src/FluentNHibernate.Testing/FluentInterfaceTests/ManyToManyMutablePropertyModelGenerationTests.cs +++ b/src/FluentNHibernate.Testing/FluentInterfaceTests/ManyToManyMutablePropertyModelGenerationTests.cs @@ -52,6 +52,14 @@ public void CascadeShouldSetModelCascadePropertyToValue() .ModelShouldMatch(x => x.Cascade.ShouldEqual("all")); } + [Test] + public void CascadeShouldAppendModelCascadePropertyToValue() + { + ManyToMany(x => x.BagOfChildren) + .Mapping(m => { m.Cascade.SaveUpdate(); m.Cascade.Merge(); }) + .ModelShouldMatch(x => x.Cascade.ShouldEqual("save-update,merge")); + } + [Test] public void CollectionTypeShouldSetModelCollectionTypePropertyToValue() { diff --git a/src/FluentNHibernate.Testing/FluentInterfaceTests/OneToOneMutablePropertyModelGenerationTests.cs b/src/FluentNHibernate.Testing/FluentInterfaceTests/OneToOneMutablePropertyModelGenerationTests.cs index 69ed3fefe..298112228 100644 --- a/src/FluentNHibernate.Testing/FluentInterfaceTests/OneToOneMutablePropertyModelGenerationTests.cs +++ b/src/FluentNHibernate.Testing/FluentInterfaceTests/OneToOneMutablePropertyModelGenerationTests.cs @@ -33,7 +33,7 @@ public void ClassShouldSetModelClassPropertyToValue() } [Test] - public void CascadeShouldSetModelCascadePropertyToTrue() + public void ConstrainedShouldSetModelConstrainedPropertyToTrue() { OneToOne() .Mapping(m => m.Constrained()) @@ -41,13 +41,29 @@ public void CascadeShouldSetModelCascadePropertyToTrue() } [Test] - public void NotCascadeShouldSetModelCascadePropertyToFalse() + public void NotConstrainedShouldSetModelConstrainedPropertyToFalse() { OneToOne() .Mapping(m => m.Not.Constrained()) .ModelShouldMatch(x => x.Constrained.ShouldBeFalse()); } + [Test] + public void CascadeSetsModelCascadePropertyToValue() + { + OneToOne() + .Mapping(m => m.Cascade.All()) + .ModelShouldMatch(x => x.Cascade.ShouldEqual("all")); + } + + [Test] + public void CascadeAppendModelCascadePropertyToValue() + { + OneToOne() + .Mapping(m => { m.Cascade.Merge(); m.Cascade.SaveUpdate(); }) + .ModelShouldMatch(x => x.Cascade.ShouldEqual("merge,save-update")); + } + [Test] public void FetchShouldSetModelFetchPropertyToValue() { diff --git a/src/FluentNHibernate/Mapping/AnyPart.cs b/src/FluentNHibernate/Mapping/AnyPart.cs index b5f6cf241..d1934bfcb 100644 --- a/src/FluentNHibernate/Mapping/AnyPart.cs +++ b/src/FluentNHibernate/Mapping/AnyPart.cs @@ -31,7 +31,11 @@ public AnyPart(Type entity, Member member) this.entity = entity; this.member = member; access = new AccessStrategyBuilder>(this, value => attributes.Set("Access", Layer.UserSupplied, value)); - cascade = new CascadeExpression>(this, value => attributes.Set("Cascade", Layer.UserSupplied, value)); + cascade = new CascadeExpression>(this, value => + { + var current = attributes.Get("Cascade") as string; + attributes.Set("Cascade", Layer.UserSupplied, current == null ? value : string.Format("{0},{1}", current, value)); + }); SetDefaultAccess(); } diff --git a/src/FluentNHibernate/Mapping/HibernateMappingPart.cs b/src/FluentNHibernate/Mapping/HibernateMappingPart.cs index 6eb6b4231..bbe7a3a37 100644 --- a/src/FluentNHibernate/Mapping/HibernateMappingPart.cs +++ b/src/FluentNHibernate/Mapping/HibernateMappingPart.cs @@ -13,7 +13,11 @@ public class HibernateMappingPart : IHibernateMappingProvider public HibernateMappingPart() { - defaultCascade = new CascadeExpression(this, value => attributes.Set("DefaultCascade", Layer.UserSupplied, value)); + defaultCascade = new CascadeExpression(this, value => + { + var current = attributes.Get("DefaultCascade") as string; + attributes.Set("DefaultCascade", Layer.UserSupplied, current == null ? value : string.Format("{0},{1}", current, value)); + }); defaultAccess = new AccessStrategyBuilder(this, value => attributes.Set("DefaultAccess", Layer.UserSupplied, value)); } diff --git a/src/FluentNHibernate/Mapping/OneToManyPart.cs b/src/FluentNHibernate/Mapping/OneToManyPart.cs index 9d3385a75..cbeedbce2 100644 --- a/src/FluentNHibernate/Mapping/OneToManyPart.cs +++ b/src/FluentNHibernate/Mapping/OneToManyPart.cs @@ -12,7 +12,6 @@ public class OneToManyPart : ToManyBase, TChild> { private readonly Type entity; private readonly ColumnMappingCollection> keyColumns; - private readonly CollectionCascadeExpression> cascade; private readonly NotFoundExpression> notFound; private IndexManyToManyPart manyToManyIndex; private readonly Type childType; @@ -31,11 +30,6 @@ protected OneToManyPart(Type entity, Member member, Type collectionType) childType = collectionType; keyColumns = new ColumnMappingCollection>(this); - cascade = new CollectionCascadeExpression>(this, value => - { - var current = collectionAttributes.Get("Cascade") as string; - collectionAttributes.Set("Cascade", Layer.UserSupplied, current == null ? value : string.Format("{0},{1}", current, value)); - }); notFound = new NotFoundExpression>(this, value => relationshipAttributes.Set("NotFound", Layer.UserSupplied, value)); collectionAttributes.Set("Name", Layer.Defaults, member.Name); @@ -54,7 +48,7 @@ public NotFoundExpression> NotFound /// public new CollectionCascadeExpression> Cascade { - get { return cascade; } + get { return base.Cascade; } } /// diff --git a/src/FluentNHibernate/Mapping/OneToOnePart.cs b/src/FluentNHibernate/Mapping/OneToOnePart.cs index f9f72bb50..ac6d1a629 100644 --- a/src/FluentNHibernate/Mapping/OneToOnePart.cs +++ b/src/FluentNHibernate/Mapping/OneToOnePart.cs @@ -21,7 +21,11 @@ public OneToOnePart(Type entity, Member member) { access = new AccessStrategyBuilder>(this, value => attributes.Set("Access", Layer.UserSupplied, value)); fetch = new FetchTypeExpression>(this, value => attributes.Set("Fetch", Layer.UserSupplied, value)); - cascade = new CascadeExpression>(this, value => attributes.Set("Cascade", Layer.UserSupplied, value)); + cascade = new CascadeExpression>(this, value => + { + var current = attributes.Get("Cascade") as string; + attributes.Set("Cascade", Layer.UserSupplied, current == null ? value : string.Format("{0},{1}", current, value)); + }); this.entity = entity; this.member = member; diff --git a/src/FluentNHibernate/Mapping/ToManyBase.cs b/src/FluentNHibernate/Mapping/ToManyBase.cs index 83bd20fc2..060094817 100644 --- a/src/FluentNHibernate/Mapping/ToManyBase.cs +++ b/src/FluentNHibernate/Mapping/ToManyBase.cs @@ -36,7 +36,11 @@ protected ToManyBase(Type entity, Member member, Type type) AsBag(); access = new AccessStrategyBuilder((T)this, value => collectionAttributes.Set("Access", Layer.UserSupplied, value)); fetch = new FetchTypeExpression((T)this, value => collectionAttributes.Set("Fetch", Layer.UserSupplied, value)); - cascade = new CollectionCascadeExpression((T)this, value => collectionAttributes.Set("Cascade", Layer.UserSupplied, value)); + cascade = new CollectionCascadeExpression((T)this, value => + { + var current = collectionAttributes.Get("Cascade") as string; + collectionAttributes.Set("Cascade", Layer.UserSupplied, current == null ? value : string.Format("{0},{1}", current, value)); + }); SetDefaultCollectionType(); SetCustomCollectionType(type);