diff --git a/samples/BasicSample/Program.cs b/samples/BasicSample/Program.cs index d9716c6..631614c 100644 --- a/samples/BasicSample/Program.cs +++ b/samples/BasicSample/Program.cs @@ -32,6 +32,8 @@ namespace BasicSample [Projectable] public IEnumerable FindOrderedProducts(string namePrefix) => Orders.SelectMany(x => x.Items).Select(x => x.Product).Where(x => x.Name.StartsWith(namePrefix)); + + public ItemImage Image { get; set; } } public class Product @@ -65,6 +67,11 @@ namespace BasicSample public double TotalPrice => Quantity * UnitPrice; } + public class ItemImage + { + public string Image { get; set; } + } + public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions options) : base(options) @@ -74,6 +81,13 @@ namespace BasicSample protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasKey(x => new { x.OrderId, x.ProductId }); + modelBuilder.Entity().OwnsOne(x => x.Image); + } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); } public DbSet Users { get; set; } @@ -91,7 +105,7 @@ namespace BasicSample .AddDbContext((provider, options) => { options .UseSqlite(dbConnection) - // .LogTo(Console.WriteLine) + .LogTo(Console.WriteLine) .EnableSensitiveDataLogging() .UseProjectables(); }) @@ -106,6 +120,7 @@ namespace BasicSample var user = new User { FirstName = "Jon", LastName = "Doe", + Image = new ItemImage { Image = "foo" }, Orders = new List { new Order { Items = new List { diff --git a/src/EntityFrameworkCore.Projectables/Services/ProjectableExpressionReplacer.cs b/src/EntityFrameworkCore.Projectables/Services/ProjectableExpressionReplacer.cs index 5995dcb..a24c1d5 100644 --- a/src/EntityFrameworkCore.Projectables/Services/ProjectableExpressionReplacer.cs +++ b/src/EntityFrameworkCore.Projectables/Services/ProjectableExpressionReplacer.cs @@ -291,17 +291,15 @@ namespace EntityFrameworkCore.Projectables.Services } var properties = entityType.GetProperties() - .Where(x => !x.IsShadowProperty()) - .Select(x => x.PropertyInfo as MemberInfo ?? x.FieldInfo!) + .Cast() .Concat( entityType.GetNavigations() - .Where(x => !x.IsShadowProperty()) - .Select(x => x.PropertyInfo as MemberInfo ?? x.FieldInfo!) - .Concat(entityType.GetSkipNavigations() - .Where(x => !x.IsShadowProperty()) - .Select(x => x.PropertyInfo as MemberInfo ?? x.FieldInfo!)) - .Where(x => _includedRelations.Contains(x.Name)) + .Cast() + .Concat(entityType.GetSkipNavigations()) + .Where(x => _includedRelations.Contains(x.Name) || x.IsEagerLoaded) ) + .Where(x => !x.IsShadowProperty()) + .Select(x => x.PropertyInfo as MemberInfo ?? x.FieldInfo!) // Remove projectable properties from the ef properties. .Where(x => projectableProperties.All(y => x.Name != y.Name));