Skip to content

Commit 3222e36

Browse files
committed
.Net 10
1 parent b0565db commit 3222e36

5 files changed

Lines changed: 63 additions & 4 deletions

File tree

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace EntityFrameworkCore.SqlServer.SimpleBulks.Tests.Database;
2+
3+
public class JsonComplexTypeOrder
4+
{
5+
public int Id { get; set; }
6+
7+
public ComplexTypeAddress ShippingAddress { get; set; }
8+
}

src/EntityFrameworkCore.SqlServer.SimpleBulks.Tests/Database/TestDbContext.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public class TestDbContext : DbContext
2121

2222
public DbSet<ComplexOwnedTypeOrder> ComplexOwnedTypeOrders { get; set; }
2323

24+
public DbSet<JsonComplexTypeOrder> JsonComplexTypeOrders { get; set; }
25+
2426
public DbSet<Blog> Blogs { get; set; }
2527

2628
public DbSet<RssBlog> RssBlogs { get; set; }
@@ -59,9 +61,15 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
5961

6062
modelBuilder.Entity<Contact>().Property(x => x.Id).HasDefaultValueSql("newsequentialid()");
6163

62-
modelBuilder.Entity<ComplexTypeOrder>().ComplexProperty(x => x.ShippingAddress, x =>
64+
modelBuilder.Entity<JsonComplexTypeOrder>().ComplexProperty(x => x.ShippingAddress, x =>
6365
{
64-
x.ToJson("xxx").HasColumnType("json");
66+
x.ToJson();
67+
//x.ToJson("xxx").HasColumnType("json");
68+
//x.ComplexProperty(y => y.Location, y =>
69+
//{
70+
// y.ToJson();
71+
// //y.ToJson("xxx").HasColumnType("json");
72+
//});
6573
});
6674

6775
base.OnModelCreating(modelBuilder);

src/EntityFrameworkCore.SqlServer.SimpleBulks.Tests/DbContextExtensions/GetPropertiesTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,36 @@ public void GetProperties_ComplexOwnedType_ReturnsCorrectColumnInformation()
251251
Assert.False(property.IsPrimaryKey);
252252
Assert.False(property.IsRowVersion);
253253
}
254+
255+
[Fact]
256+
public void GetProperties_JsonComplexType_ReturnsCorrectColumnInformation()
257+
{
258+
// Arrange
259+
var dbContext = new TestDbContext("", "");
260+
261+
// Act
262+
var properties = dbContext.GetProperties(typeof(JsonComplexTypeOrder));
263+
264+
// Assert
265+
Assert.Equal(2, properties.Count);
266+
267+
var property = properties.First(p => p.PropertyName == "Id");
268+
Assert.Equal(typeof(int), property.PropertyType);
269+
Assert.Equal("Id", property.ColumnName);
270+
Assert.Equal("int", property.ColumnType);
271+
Assert.Equal(ValueGenerated.OnAdd, property.ValueGenerated);
272+
Assert.Null(property.DefaultValueSql);
273+
Assert.True(property.IsPrimaryKey);
274+
Assert.False(property.IsRowVersion);
275+
276+
property = properties.First(p => p.PropertyName == "ShippingAddress");
277+
Assert.Equal(typeof(ComplexTypeAddress), property.PropertyType);
278+
Assert.Equal("ShippingAddress", property.ColumnName);
279+
Assert.Equal("nvarchar(max)", property.ColumnType);
280+
Assert.Equal(ValueGenerated.Never, property.ValueGenerated);
281+
Assert.Null(property.DefaultValueSql);
282+
Assert.False(property.IsPrimaryKey);
283+
Assert.False(property.IsRowVersion);
284+
Assert.True(property.IsJson);
285+
}
254286
}

src/EntityFrameworkCore.SqlServer.SimpleBulks/ColumnInfor.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,6 @@ public class ColumnInfor
2222
public bool IsRowVersion { get; init; }
2323

2424
public ValueConverter? ValueConverter { get; set; }
25+
26+
public bool IsJson { get; set; }
2527
}

src/EntityFrameworkCore.SqlServer.SimpleBulks/Extensions/DbContextExtensions.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ private static List<ColumnInfor> GetColumnInfos(Type type, IEnumerable<IProperty
183183
private static void AddJsonComplexProperty(List<ColumnInfor> columnInfors, IComplexProperty complexProperty, StoreObjectIdentifier storeObjectIdentifier)
184184
{
185185
var containerColumnName = complexProperty.ComplexType.GetContainerColumnName();
186-
var containerColumnType = complexProperty.ComplexType.GetContainerColumnType();
186+
var containerColumnType = complexProperty.ComplexType.GetContainerColumnType() ?? "nvarchar(max)";
187187

188188
columnInfors.Add(new ColumnInfor
189189
{
@@ -196,6 +196,7 @@ private static void AddJsonComplexProperty(List<ColumnInfor> columnInfors, IComp
196196
IsPrimaryKey = false,
197197
IsRowVersion = false,
198198
ValueConverter = null,
199+
IsJson = true
199200
});
200201
}
201202

@@ -209,7 +210,15 @@ private static void AddComplexProperty(List<ColumnInfor> columnInfors, IComplexP
209210

210211
foreach (var nestedComplexProperty in nestedComplexProperties)
211212
{
212-
AddComplexProperty(columnInfors, nestedComplexProperty, storeObjectIdentifier, prefix + nestedComplexProperty.Name + ".");
213+
if (complexProperty.ComplexType.IsMappedToJson())
214+
{
215+
// For JSON-mapped complex types, add the complex property itself as a single JSON column
216+
AddJsonComplexProperty(columnInfors, nestedComplexProperty, storeObjectIdentifier);
217+
}
218+
else
219+
{
220+
AddComplexProperty(columnInfors, nestedComplexProperty, storeObjectIdentifier, prefix + nestedComplexProperty.Name + ".");
221+
}
213222
}
214223
}
215224

0 commit comments

Comments
 (0)