Downcasting com Entity Framework

Tenho um projeto em que defini na EF umEmployer como uma classe derivada deUser. No meu processo, crio um usuário sem saber se ele será um empregador (ou outros tipos de usuários) e, posteriormente, preciso convertê-lo. No começo, tentei (o Intellisense indicou que existe uma conversão explícita):

Employer e = (Employer) GetUser();

mas em tempo de execução eu tenho:

Unable to cast object of type 'System.Data.Entity.DynamicProxies.User_7B...0D' to type 'Employer'.

ntão tentei escrever um converso

public partial class User
{
    public static explicit operator Employer(User u)
    {

mas recebo o erro:

Error   21  'User.explicit operator Employer(User)': user-defined
conversions to or from a derived class are not allowed
C:\Users\..\Documents\Visual Studio 2010\Projects\..\Website\Models\EF.Custom.cs

bem. Em seguida, sobrecarreguei o construtor paraEmployer como isso

public partial class Employer
{
    public Employer(User u)
    {
        this.Id = u.Id;
        this.Claims = u.Claims;
        // etc.
    }
}

e achei que eu poderia fazer:

Employer e = new Employer(GetUser());

mas quando o executo recebo o erro:

System.InvalidOperationException was unhandled by user code
  Message=Conflicting changes to the role 'User' of the
  relationship 'EF.ClaimUser' have been detected.
  Source=System.Data.Entity
  StackTrace:
       [...]
       at Controllers.AuthController.Register(String Company, String GivenName, 
       String Surname, String Title, String Department) in C:\Users\..\Documents\
       Visual Studio 2010\Projects\..\Website\Controllers\AuthController.cs:line

como último recurso, tentei escrever o seguinte:

        Employer e = Auth.Claims("id")
            .Where(x => x.Value == Auth.NameIdentifier())
            .Select(x => x.User)
            .Cast<Employer>()
            .Single();

... GetUser () retorna um objeto do tipoUser que não oferece o.Cast<> então usei uma consulta direta para chegar lá ... mas ainda recebo a exceção de objetos de proxy dinâmic

ntão, minha pergunta é: como posso fazer downcast quando o objeto tem persistência através do E

questionAnswers(2)

yourAnswerToTheQuestion