J'ai un problème dans l'architecture de mon application.Comment concevoir mon code de service/référentiel avec Linq2Sql!
J'ai la structure suivante avec seulement les aspects importants montrés.
namespace Domain
{
public class Invoice
{
//properties
}
public class InvoiceRepository
{
public Linq2SqlContext context = new Linq2SqlContext();
public IQueryable<Invoice> GetInvoices()
{
var query = from inv in _dbctx.Invoices orderby inv.invInvoiceDate descending select GetInvoice(inv) ;
return query;
}
}
public class InvoiceService()
{
public InvoiceRepository _repository = new InvoiceRepositroy();
public IQueryable<Invoice> GetInvoices()
{
return _repository.GetInvoices();
}
}
}
namespace MyApp
{
public class UI
{
public InvoiceService _service = new InvoiceService();
public void FilterInvoices()
{
var query =
(
from i in _service.GetInvoices()
from s in _service.GetStatuses()
where i.ProjectID == _projectid &&
s.ID == i.Status
select new
{
InvoiceID = i.ID,
DocumentTotal = i.TotalDue.ToString(),
Created = i.Created,
WeekEnding = i.WeekEnding,
Status = s.staStatus
}
).Skip(_pageIndex * _pageSize).Take(_pageSize);
}
}
{
Je veux retourner IQueryable de mon service que je puisse filtre à partir du code client. Mais le problème que je rencontre est est les erreurs de la méthode FilterInvoices avec "Non supporté traduction en sql" à cause de la méthode GetInvoice qui est utilisée pour renvoyer une entité Facture (c'est une couche sur le dessus du LInq2 sql layer) et non une entité Linq2sql Invoice.
Alors, comment puis-je retourner un IQueryable de mon service avec cette structure? Aussi comment trier et retourner un IQureyable dans le référentiel GetInvoices.
Espérons que cela a du sens.
Malcolm
Pourquoi la conversion vers IEnumarable supporterait-elle mieux la traduction vers SQL que IQueryable? – Manu
non, le problème est dans GetInvoices. linq tente de traduire GetINvoice (inv) dans un appel de procédure stockée –