dotnet / dotnet/EntityFramework.Docs

Including sub-collection for derived type returns repeating items

Open
#4,099 7 comments 0 reactions 0 assignees View on GitHub
area-model-building
Dominant language
Mermaid
Stars
1.7k
Forks
2k
Avg merge
7d 23h
Merged PRs (30d)
16

Description

Including sub-collection causes repeated entity results, based on added sub-collection item.

Code below is psudo-kind, working sample link is [here](https://github.com/gterdem/EfCore-Inheritance)

```
public class Plane/Automobile/Yact : VehicleBase (abstract)
{
public Guid Id { get; private set; }
public ICollection Drivers { get; private set; }
}
```

```
public class Driver
{
public Guid Id { get; private set; }
public Guid VehicleId { get; set; } //Same id for all derived classes.
}
```

When trying to query like `var vehiclesWithDrivers = await _context.Vehicles.AsNoTracking().Include("Drivers").ToListAsync();` result **has repeating entities** based on sub-collection members they have.

DbContext
```
public class AppDbContext : DbContext
{
public DbSet Vehicles { get; set; }
public DbSet Drivers { get; set; }
public DbSet Automobiles { get; set; }
public DbSet Planes { get; set; }
public DbSet Yacts { get; set; }
}
```

```
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity(vb =>
{
vb.ToTable("Vehicles");
vb.HasDiscriminator("Type")
.HasValue(VehicleTypes.Drone)
.HasValue(VehicleTypes.Automobile)
.HasValue(VehicleTypes.Plane)
.HasValue(VehicleTypes.Yact);
});

modelBuilder.Entity(a =>
{
a.HasMany(v => v.Drivers)
.WithOne()
.HasForeignKey(q => q.VehicleId)
.OnDelete(DeleteBehavior.ClientCascade)
.IsRequired();
});

modelBuilder.Entity(a =>
{
a.HasMany(v => v.Drivers)
.WithOne()
.HasForeignKey(q => q.VehicleId)
.OnDelete(DeleteBehavior.ClientCascade)
.IsRequired();
});

modelBuilder.Entity(a =>
{
a.HasMany(v => v.Drivers)
.WithOne()
.HasForeignKey(q => q.VehicleId)
.OnDelete(DeleteBehavior.ClientCascade)
.IsRequired();
});
}
```

### Steps to reproduce
I have created a sample project here at https://github.com/gterdem/EfCore-Inheritance.
### Further technical details

EF Core version: 3.1.6
Database provider: Microsoft.EntityFrameworkCore.SqlServer and SqLite
Target framework: .NET Core 3.1.301
Operating system: Windows 10

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.