Keeping data processing out of controllers
Your brace style is inconsistent. Allman style is usually applied in C#.

public class AppUser{
    // snipped
}

public class AddressDetails
{
    // snipped
}




Longtitude is a spelling error, it should be Longitude.



Underscores are usually only used for fields; properties should be PascalCase:

  protected AppDB _db { get; set; }
  protected AppUser _currentUser { get; set; }




Don't abbreviate unnecessarily: I don't know what Rep is, I do know what Repository is.

public class EmployeeRep : UserRep




Is this a field or a property:

private EmployeeRep _employeeRep { get; set; }


The { get; set; } says "property", but the private and the underscore at the start of the name says "field".



Avoid "negative checks" like you do here:

_employeeRep = (User.Identity.GetUserId() != null) 
    ? new EmployeeRep(User.Identity.GetUserId()) 
    : null;


Invert that logic and things become a lot clearer:

_employeeRep = (User.Identity.GetUserId() == null) 
    ? null 
    : new EmployeeRep(User.Identity.GetUserId());


Also, since you call User.Identity.GetUserId() twice, consider calling it once, storing the result in a variable and then using that variable.