'Strange Entity Framework behavior

I have 2 models:

public class Office
{
    [Key] public int OfficeId { get; set; }
    public string Brand { get; set; }
    public string Type { get; set; }
    [NotMapped] public IRepository<CarItem> CarsDataBase { get; set; }
    public virtual ICollection<CarItem> Cars { get; set; }
    public Office(string brand, string type)
    {
        Type = type;
        Cars = new List<CarItem>();
        Brand = brand;
    }
}

and

public class CarItem
{
    public CarItem() { } //for serialization
    public CarItem(string brand, string model, uint price, uint stockBalance)
    {
        Brand = brand;
        Model = model;
        Price = price;
        StockBalance = stockBalance;
    }
    [Key] public int ItemId { get; set; }
    public string Brand { get; set; }
    public string Model { get; set; }
    public uint Price { get; set; }
    public uint StockBalance { get; set; }
    public int? OfficeId { get; set; }
    public Office Office { get; set; }
}

and DataBase Context

public class EFDataBaseContext : DbContext
{
    public DbSet<Office> Offices => Set<Office>();
    public DbSet<CarItem> CarItems => Set<CarItem>();
    public EFDataBaseContext()
    {
        Database.EnsureCreated();
    } 
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=carstoredb;Trusted_Connection=True;");
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Office>().HasData
        (
            new Office("Audi", "SQL")
            {
                OfficeId = 1,
            },
            new Office("Scoda", "SQL")
            {
                OfficeId = 2,
            }
        );
        modelBuilder.Entity<CarItem>(entity =>
        {
            entity.HasOne(item => item.Office).WithMany(office => office.Cars).HasForeignKey(item => item.OfficeId).OnDelete(DeleteBehavior.Cascade);
        });
        modelBuilder.Entity<SparePart>(entity =>
        {
            entity.HasOne(item => item.Office).WithMany(office => office.Parts).HasForeignKey(item => item.OfficeId).OnDelete(DeleteBehavior.Cascade);
        });
        modelBuilder.Entity<CarItem>().HasData
        (
            new CarItem { OfficeId = 1, ItemId = 1, Brand = "Audi", Model = "A228", Price = 4, StockBalance = 14 },
            new CarItem { OfficeId = 1, ItemId = 2, Brand = "Audi", Model = "Super", Price = 44, StockBalance = 5 },
            new CarItem { OfficeId = 2, ItemId = 3, Brand = "Scoda", Model = "Logan", Price = 47, StockBalance = 9 },
            new CarItem { OfficeId = 2, ItemId = 4, Brand = "Scoda", Model = "Spider", Price = 78, StockBalance = 3 }
        );
    }

Manually I added an office called BSU. And in main function I write this:

using (EFDataBaseContext db = new EFDataBaseContext())
{
    Office office = mainOffice.Dealerships.FirstOrDefault(of => of.Brand == "BSU");
    CarItem carItem = new CarItem(office.Brand, "BSss", 2222, 4);
    office.CarsDataBase ??= new EFDataBase(office);
    office.CarsDataBase.Create(carItem);
}

Adding a new CarItem to the BSU somehow magically creates a new office named BSU in my database every time a new CarItem is added to the BSU.

using (EFDataBaseContext db = new EFDataBaseContext())
{
    Office office = mainOffice.Dealerships.FirstOrDefault(of => of.Brand == "Audi");
    CarItem carItem = new CarItem(office.Brand, "AuuuU", 2222, 4);
    office.CarsDataBase ??= new EFDataBase(office);
    office.CarsDataBase.Create(carItem);
}

Adding a new CarItem to an Audi, on the other hand, does absolutely nothing. No new cars with the Audi brand appear in the database, and nothing at all.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source