Search code examples
linqentity-frameworklinq-to-entities

Entity Framework not binding entity


I have the following db structure: enter image description here

I am using EF6 to create the entities from database and have the following classes created by EF6:

  public partial class Mechanic
   {
    public Mechanic()
    {
        this.MechanicAddresses = new HashSet<MechanicAddress>();
        this.MechanicServices = new HashSet<MechanicService>();
    }

    public string ID { get; set; }
    public string Email { get; set; }
    public bool EmailConfirmed { get; set; }
    public string PasswordHash { get; set; }
    public string SecurityStamp { get; set; }
    public string PhoneNumber { get; set; }
    public bool PhoneNumberConfirmed { get; set; }
    public bool TwoFactorEnabled { get; set; }
    public Nullable<System.DateTime> LockoutEndDateUtc { get; set; }
    public bool LockoutEnabled { get; set; }
    public int AccessFailedCount { get; set; }
    public string UserName { get; set; }
    public string CompanyName { get; set; }
    public string ContactName { get; set; }
    public string MobileNumber { get; set; }
    public Nullable<bool> IsMobile { get; set; }
    public string Url { get; set; }
    public string FaceBookUrl { get; set; }
    public string TwitterUrl { get; set; }
    public string Description { get; set; }
    public string Discriminator { get; set; }
    public bool IsEnabled { get; set; }
    public bool IsAuthorised { get; set; }
    public string Logo { get; set; }
    public System.DateTime CreationTimestamp { get; set; }

    public virtual ICollection<MechanicAddress> MechanicAddresses { get; set; }
    public virtual ICollection<MechanicService> MechanicServices { get; set; }
    }


public partial class MechanicAddress
{
    public int ID { get; set; }
    public string MechanicId { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string AddressLine3 { get; set; }
    public string District { get; set; }
    public string Region { get; set; }
    public string PostalCode { get; set; }
    public int CountryId { get; set; }
    public System.DateTime CreationTimestamp { get; set; }
    public bool IsPrimary { get; set; }
    public Nullable<double> Latitude { get; set; }
    public Nullable<double> Longitude { get; set; }
    public System.Data.Entity.Spatial.DbGeography Location { get; set; }

    public virtual Country Country { get; set; }
    public virtual Mechanic Mechanic { get; set; }
}


public partial class MechanicService
{
    public int ID { get; set; }
    public string MechanicId { get; set; }
    public string Service { get; set; }

    public virtual Mechanic Mechanic { get; set; }
}

The data is correct so i expect to get data in all entities.

When i run the following linq query in my DAL:

Mechanic mech = context.Mechanics.Where(a => a.ID == id).Include(a => a.MechanicAddresses).Include(a => a.MechanicServices).FirstOrDefault();

It returns the mechanic and mechanicAddresses but mechanicServices is always empty (count == 0).

When i run the same query in LinqPad I get all entities filled as expected.

I have removed the edmx and re-created it but still get the same issue.


Solution

  • The only way i was able to resolve this was to:

    • delete the EDMX
    • script the create for the mechanicsServices table
    • script the data
    • drop the mechanicsServices table
    • run the create table script from above
    • run the insert data script
    • regenerate the EDMX

    This now works, WTF! Can't explain it.

    I know it's always best to understand what went wrong but this one beat me.