Вы создаете контекст данных в блоке using в конструкторе вашей DataModel ... поэтому к моменту обращения к MAC-запросам контекст данных был удален.
Обратите внимание на следующее:
public class DataModel : IDisposable {
btWholesaleDataContext db = new btWholesaleDataContext();
public void Dispose()
{
btWholesaleDataContext.Dipose();
}
public IQueryable<Models.BT.Request> MACRequests {
get {
return from r in db.btRequests
select new Models.BT.Request {
ID = r.ID,
Date = r.DateTime,
StatusCode = 3,
Status = r.Status
};
}
}
}
Обратите внимание, что это использование будет работать:
using (var dm = new DataModel())
{
dm.MACRequests.ToArray();
}
, но это не удастся по той же причине, что и оригинал:
IQueryable<Models.BT.Request> requests = null;
using (var dm = new DataModel())
{
requests = dm.MACRequests;
}
// this will fail because the context is disposed by the time we force enumeration of the query
requests.ToArray();
... В качестве альтернативы, поскольку службы данных WCF не могут фильтровать проекции, и, таким образом, все, что вы действительно можете сделать с запросом
from r in db.btRequests
select new Models.BT.Request {
ID = r.ID,
Date = r.DateTime,
StatusCode = 3,
Status = r.Status
};
, это выполнить его ...
просто подумайте об изменении исходного кода, чтобы он возвращал массив или список, а не оставлял его как запрашиваемый.