No Entity Framework, como adiciono uma entidade genérica ao DbSet correspondente sem uma instrução switch que enumere todos os DbSets possíveis?

Eu tenho dois tipos de entidades: uma entidade de funcionário e uma entidade de escritório, com uma relação de um para muitos entre as duas, de modo que haja muitos funcionários para um escritório. Para EF, um DbSet é criado no arquivo de contexto para cada entidade:

public DbSet<Office> Offices { get; set; }
public DbSet<Employee> Employees { get; set; }

Um tutorial da EF que eu fiz me fez usar meus métodos CRUD para uma entidade específica. Por exemplo, o método abaixo cria um escritório e o adiciona ao DbSet do escritório (ignore o material do MVC - não estou mais fazendo isso):

public ActionResult Create([Bind(Include = "Address,BusinessName")] Office office)
    {
        try
        {

            if (ModelState.IsValid)
            {
                db.Offices.Add(office);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

        }
        catch (DataException /* dex */)
        {
            //Log the error (uncomment dex variable name and add a line here to write a log.
            ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
        }
        return View(office);
    }

Basicamente, as duas coisas que quero enfatizar é que um objeto do Office é passado para o método e que o escritório é adicionado ao DbSet do Office escrevendo explicitamente db.Offices

db.Offices.Add(office);

No entanto, preciso escrever um método no qual um objeto de entidade genérico possa ser transmitido e posso adicioná-lo ao seu DbSet correto. A idéia aproximada para o método que eu tenho é algo assim (eu ignorei todas as coisas do MVC):

public void Create(object entityToCreate)
{
    db.CorrespondingEntityType.Add(entityToCreate);
    db.SaveChanges();
}

Então, digamos que eu tenho um objeto Employee. Eu posso passar esse Funcionário para o método Create e ele pode ver que é um Funcionário e, portanto, o adicionaria ao DbSet Funcionários. Não sei se a EF suporta isso. Uma alternativa seria fazer uma declaração de opção e, dessa maneira, dependendo do tipo de entidade que está sendo transmitida, eu poderia chamar diretamente a qual DbSet o qual adicionar a entidade. Mas quero evitar isso porque vou trabalhar com muito mais entidades do que apenas essas duas. Também terei que fazer coisas semelhantes para os outros métodos CRUD.

eu viesta documentação do msdn sobre o método ObjectSet.AddObject, e parece que deve ser útil, mas não sei ao certo como funciona.

questionAnswers(2)

yourAnswerToTheQuestion