dotnet / dotnet/EntityFramework.Docs
Including sub-collection for derived type returns repeating items
- 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
Assessment
This issue has not been assessed yet.