У меня возникли проблемы с соблюдением принципа DRY при реализации функции EntityFramework DBContext.применить DRY с entityContext
В деталях, у меня есть функция SelectClient:
public static Client SelectClientFromID(String ClientID)
{
using (DBContext SaveContext = new DBContext())
{
try
{
SaveContext.MyCompanies.Load();
SaveContext.MyProjects.Load();
SaveContext.MyClient.Load();
return SaveContext.MyClient.Where(x => x.ClientID.ToString() == ClientID).FirstOrDefault();
}
catch (Exception)
{
throw;
}
}
}
Теперь я хотел бы иметь функцию DeleteClient, потому что теперь он выглядит так:
public static void DeleteClient(Client client)
{
try
{
using (DBContext SaveContext = new DBContext())
{
SaveContext.MyCompanies.Load();
SaveContext.MyProjects.Load();
SaveContext.MyClient.Load();
Client savedClient = SaveContext.MyClient.Where(x => x.ClientID == client.ClientID).FirstOrDefault();
SaveContext.MyClient.Remove(savedClient);
SaveContext.SaveChanges();
}
}
catch (Exception)
{
throw;
}
}
Чтобы следовать СУХОЙ принцип I хотел бы вместо этого называть мою функцию SelectClientFromID
и использовать мой SaveContext.MyClient.Remove(savedClient)
с savedClient
, являющимся возвратом от моей функции SelectClientID
.
К сожалению, так как мой клиент придет из другого DBContext
, он не работает.
Как я должен правильно выполнять мои функции?
Хм, я только что закончил читать http://www.codeproject.com/Articles/581487/Unit-of-Work-Design-Pattern, но мне кажется, что моя Unit of Work уже является моим DBC-текстом. Казалось бы, создать глобальный DBC-текст опасно, есть ли у вас документация с более подробным объяснением? – Belterius
@Belterius http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work -patterns-in-as-asp-net-mvc-application здесь хорошая статья – Alex