diff --git a/src/DocumentDbTests/Bugs/Bug_3464_Include_with_SingleOrDefault.cs b/src/DocumentDbTests/Bugs/Bug_3464_Include_with_SingleOrDefault.cs new file mode 100644 index 0000000000..1e71350868 --- /dev/null +++ b/src/DocumentDbTests/Bugs/Bug_3464_Include_with_SingleOrDefault.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using Marten; +using Marten.Linq; +using Marten.Testing.Harness; +using Xunit; +using Shouldly; + +namespace DocumentDbTests.Bugs; + +public class Bug_3464_Include_with_SingleOrDefault : BugIntegrationContext +{ + [Fact] + public async Task can_make_the_query() + { + StoreOptions(opts => + { + opts.Schema.For().AddSubClass() + .AddSubClass(); + }); + + var product = new Product(); + theSession.Store(product); + + var user = new User3464(); + theSession.Store(user); + + var order = new Order { UserId = user.Id, OrderItemId = product.Id }; + theSession.Store(order); + + await theSession.SaveChangesAsync(); + + IList orderItems = []; + IList users = []; + + var orderId = order.Id; + + var order2 = await theSession.Query() + .Include(o => o.OrderItemId, orderItems) + .Include(o => o.UserId, users) + .SingleOrDefaultAsync(o => o.Id == orderId); + + order2.ShouldNotBeNull(); + orderItems.Single().Id.ShouldBe(product.Id); + users.Single().Id.ShouldBe(user.Id); + } +} + +public class OrderDetails : ICompiledQuery +{ + public Guid OrderId { get; init; } + + public IList OrderItems { get; } = []; + public IList Users { get; } = []; + + public Expression, Order?>> QueryIs() + { + return q => q + .Include(o => o.OrderItemId, OrderItems) + .Include(o => o.UserId, Users) + .SingleOrDefault(o => o.Id == OrderId); + } +} + +public class Order +{ + public Guid Id { get; set; } + public Guid OrderItemId { get; set; } + public Guid UserId { get; set; } +} + +public class User3464 +{ + public Guid Id { get; set; } +} + +public abstract class OrderItem +{ + public Guid Id { get; set; } + +} + +public class Product: OrderItem +{ + +} + +public class Subscription: OrderItem +{ + +}