Току-що изучавам Entity Framework и постигнах добър напредък в включването му в моята структура на многослоен код. Имам 2 визуални слоя, бизнес слой и слой за достъп до данни.
Проблемът ми е в предаването на обект на обект между слоевете. Този примерен код не работи:
// BLL
public static void Test1()
{
List<User> users = (from u in GetActiveUsers()
where u.ID == 1
select u).ToList<User>();
// Do something with users
}
// DAL
public static IQueryable<User> GetActiveUsers()
{
using (var context = new CSEntities())
{
return from u in context.Users
where u.Employee.FirstName == "Tom"
select u;
}
}
Получавам съобщение за грешка Екземплярът на ObjectContext е премахнат и вече не може да се използва за операции, които изискват връзка.
Ако премахна using от метода GetActiveUsers, той работи добре.
Знам, че това е опасна практика, тъй като GC може да се освободи от контекста във всеки един момент и да прецака моя BLL.
И така, какъв е правилният начин за предаване на информация между слоевете? Трябва ли да предавам и контекста?