Convertendo uma classe EF CodeFirst Base para uma classe Inherited (usando tabela por tipo)

Eu estou usando o EF Code First e tenho duas classes definidas da seguinte forma:

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
}

[Table("Visitors")]
public class Visitor : User
{
    public Visitor()
    {
        Favourites = new List<Building>();
    }
    public virtual IList<Building> Favourites { get; set; }
}

Isso usa a herança Table-Per-Type e define o esquema do banco de dados da seguinte maneira:

Users Table
    Id int PK
    Username nvarchar(max)
    Email nvarchar(max)
Visitors Table
    Id int PK (FK to Users table)

É exatamente assim que eu queria estruturá-lo.Agora minha pergunta é, se eu criar um objeto de usuário e salvá-lo no banco de dados, como mais tarde será possível estendê-lo a um visitante (se eu precisar?) Preciso excluir o usuário e criar um novo visitante ou posso como converter o usuário em um objeto de visitante e a entrada na tabela de usuários permanecerá intacta e uma nova entrada será adicionada à tabela de visitantes que faz referência ao usuário? Algo como o código abaixo?

Context.Set<User>().Add(new User(){Id=1, Username="Bob", Email="[email protected]"});
Context.SaveChanges();

//and elsewhere in the project I want to do this sort of thing:
Context.Set<Visitor>().Where(v=>v.Id == 1).FirstOrDefault().Favourites.Add(someFavouriteBuilding); //This obviously doesn't work, because the FirstOrDefault call returns null, so it will throw an exception
Context.SaveChanges();

//or maybe this can be modified slightly to work?:
var visitor = Context.Set<Visitor>().Where(v=>v.Id == 1).FirstOrDefault();
if (visitor==null)
{
    visitor = new Visitor(Context.Set<User>().Where(u=>u.Id == 1).FirstOrDefault()); // this contructor copies all the property values accross and returns a new object
}
visitor.Favourites.Add(someFavouriteBuilding); //This obviously doesn't work either
var entry = Context.Entry(visitor);
entry.State = EntityState.Modified;//here it throws this error: An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
Context.SaveChanges();

Eu acho que a segunda abordagem no código acima pode funcionar se eu só puder anexá-lo ao contexto corretamente. De qualquer forma, o código acima é apenas para mostrar o que estou tentando alcançar. Eu sei que não vai funcionar. Alguém pode sugerir uma abordagem mais elegante?

Obrigado

questionAnswers(3)

yourAnswerToTheQuestion