Skip to content

Commit f5b97b5

Browse files
authored
Add a test for default owned collection mapping (#36663)
Fixes #35710
1 parent a9f6488 commit f5b97b5

File tree

3 files changed

+49
-23
lines changed

3 files changed

+49
-23
lines changed

test/EFCore.Relational.Specification.Tests/Query/PrecompiledQueryRelationalTestBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace Microsoft.EntityFrameworkCore.Query;
1717
/// See also <see cref="PrecompiledSqlPregenerationQueryRelationalTestBase" /> for tests specifically related to SQL pregeneration.
1818
/// </summary>
1919
[Collection("PrecompiledQuery")]
20-
public class PrecompiledQueryRelationalTestBase
20+
public abstract class PrecompiledQueryRelationalTestBase
2121
{
2222
public PrecompiledQueryRelationalTestBase(PrecompiledQueryRelationalFixture fixture, ITestOutputHelper testOutputHelper)
2323
{

test/EFCore.Relational.Specification.Tests/Query/PrecompiledSqlPregenerationQueryRelationalTestBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Microsoft.EntityFrameworkCore.Query;
1414
/// SQL pregeneration.
1515
/// </summary>
1616
[Collection("PrecompiledQuery")]
17-
public class PrecompiledSqlPregenerationQueryRelationalTestBase
17+
public abstract class PrecompiledSqlPregenerationQueryRelationalTestBase
1818
{
1919
public PrecompiledSqlPregenerationQueryRelationalTestBase(
2020
PrecompiledSqlPregenerationQueryRelationalFixture fixture,

test/EFCore.SqlServer.FunctionalTests/ModelBuilding/SqlServerModelBuilderTestBase.cs

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,6 +1099,53 @@ public virtual void Owned_type_collections_can_be_mapped_to_different_tables()
10991099
Assert.Null(owned.GetSchema());
11001100
}
11011101

1102+
[ConditionalFact]
1103+
public virtual void Owned_type_collections_are_mapped_to_same_tables_by_default()
1104+
{
1105+
var modelBuilder = CreateModelBuilder();
1106+
1107+
modelBuilder.Entity<JsonEntityWithNesting>(b =>
1108+
{
1109+
b.OwnsOne(x => x.OwnedReference1, bb =>
1110+
{
1111+
bb.OwnsOne(x => x.Reference1);
1112+
bb.OwnsOne(x => x.Reference2);
1113+
bb.OwnsMany(x => x.Collection1);
1114+
bb.OwnsMany(x => x.Collection2);
1115+
});
1116+
1117+
b.OwnsOne(x => x.OwnedReference2, bb =>
1118+
{
1119+
bb.OwnsOne(x => x.Reference1);
1120+
bb.OwnsOne(x => x.Reference2);
1121+
bb.OwnsMany(x => x.Collection1);
1122+
bb.OwnsMany(x => x.Collection2);
1123+
});
1124+
1125+
b.OwnsMany(x => x.OwnedCollection1, bb =>
1126+
{
1127+
bb.OwnsOne(x => x.Reference1);
1128+
bb.OwnsOne(x => x.Reference2);
1129+
bb.OwnsMany(x => x.Collection1);
1130+
bb.OwnsMany(x => x.Collection2);
1131+
});
1132+
1133+
b.OwnsMany(x => x.OwnedCollection2, bb =>
1134+
{
1135+
bb.OwnsOne(x => x.Reference1);
1136+
bb.OwnsOne(x => x.Reference2);
1137+
bb.OwnsMany(x => x.Collection1);
1138+
bb.OwnsMany(x => x.Collection2);
1139+
});
1140+
});
1141+
1142+
Assert.Equal(RelationalStrings.IncompatibleTableNoRelationship(
1143+
"JsonEntityWithNesting_Collection1",
1144+
"JsonEntityWithNesting.OwnedReference2#OwnedEntityExtraLevel.Collection1#OwnedEntity",
1145+
"JsonEntityWithNesting.OwnedReference1#OwnedEntityExtraLevel.Collection1#OwnedEntity"),
1146+
Assert.Throws<InvalidOperationException>(() => modelBuilder.FinalizeModel()).Message);
1147+
}
1148+
11021149
[ConditionalFact]
11031150
public virtual void Owned_type_collections_can_be_mapped_to_a_view()
11041151
{
@@ -2007,27 +2054,6 @@ public virtual void Json_entity_with_custom_property_names()
20072054
Assert.Equal("InnerEnum", ownedEntity.GetProperty("Enum").GetJsonPropertyName());
20082055
}
20092056
}
2010-
2011-
[ConditionalFact]
2012-
public virtual void Json_entity_and_normal_owned_can_exist_side_to_side_on_same_entity()
2013-
{
2014-
var modelBuilder = CreateModelBuilder();
2015-
2016-
modelBuilder.Entity<JsonEntity>(b =>
2017-
{
2018-
b.OwnsOne(x => x.OwnedReference1);
2019-
b.OwnsOne(x => x.OwnedReference2, bb => bb.ToJson("reference"));
2020-
b.OwnsMany(x => x.OwnedCollection1);
2021-
b.OwnsMany(x => x.OwnedCollection2, bb => bb.ToJson("collection"));
2022-
});
2023-
2024-
var model = modelBuilder.FinalizeModel();
2025-
2026-
var ownedEntities = model.FindEntityTypes(typeof(OwnedEntity));
2027-
Assert.Equal(4, ownedEntities.Count());
2028-
Assert.Equal(2, ownedEntities.Where(e => e.IsMappedToJson()).Count());
2029-
Assert.Equal(2, ownedEntities.Where(e => e.IsOwned() && !e.IsMappedToJson()).Count());
2030-
}
20312057
}
20322058

20332059
public class SqlServerModelBuilderFixture : RelationalModelBuilderFixture

0 commit comments

Comments
 (0)