В Entity Framework, как мне добавить универсальный объект к соответствующему DbSet без оператора switch, который перечисляет все возможные DbSets?
У меня есть два типа объектов: объект сотрудника и объект офиса, с отношением один ко многим между двумя, так что на один офис приходится много сотрудников. Для EF DbSet создается в файле контекста для каждого объекта:
public DbSet<Office> Offices { get; set; }
public DbSet<Employee> Employees { get; set; }
Учебник EF, который я сделал, заставил меня сделать мои методы CRUD для конкретной сущности. Например, приведенный ниже метод создает офис и добавляет его в офис DbSet (не обращайте внимания на материал MVC - я больше этим не занимаюсь):
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);
}
В основном, две вещи, которые я хочу подчеркнуть, это то, что объект Office передается в метод, и что офис добавляется в Office DbSet путем явной записи db.Offices:
db.Offices.Add(office);
Тем не менее, мне нужно написать метод, в котором может быть передан объект общего объекта, и я могу добавить это к его правильному DbSet. Грубая идея метода, который у меня есть, выглядит примерно так (я проигнорировал все вещи MVC):
public void Create(object entityToCreate)
{
db.CorrespondingEntityType.Add(entityToCreate);
db.SaveChanges();
}
Допустим, у меня есть объект Employee. Я могу передать этого Employee в метод Create, и он увидит, что это Employee, и он добавил бы его в DbSet Employees. Я не знаю, поддерживает ли EF это все же. Альтернативой может быть создание оператора switch, и таким образом, в зависимости от типа передаваемой сущности, я мог бы напрямую вызвать, к какому DbSet добавить сущность. Но я хочу избежать этого, потому что я буду работать с гораздо большим количеством организаций, чем только с этими двумя. Также мне придется делать подобные вещи для других методов CRUD.
Я виделэта документация от msdn о методе ObjectSet.AddObjectКажется, это должно быть полезно, но я не уверен, как это работает.