MVC Core Data Access Convenzione di denominazione Folder vs Repository

0

Abbiamo una tabella delle transazioni del cliente con molte relazioni con le chiavi esterne.

Vogliamo solo vedere alcune colonne delle 3 tabelle unite in un'interfaccia web.

Ad esempio, Date, PurchaseAmount, ProductName e StatusDescription.

Ho sentito che il repository non dovrebbe selezionare certe colonne, dovrebbe selezionare Tutte le colonne. Quindi non dovremmo usare il repository di seguito. Se si leggono tutte le colonne o troppe tabelle correlate, la query sql può rallentare con dati non ottimizzati.

Come dovrei denominare questo nuovo metodo di accesso ai dati?

Inoltre, dovrei creare una cartella personale per questo, ho già una cartella del repository., dovrei creare un'altra cartella per WebRepository?

CustomerTransactionWebRepository anziché CustomerTransactionRepository?

Repository:

public class CustomerTransactionRepository: ICustomerTransactionRepository{
    public CustomerTransaction GetCustomerTransaction(int CustomerTransactionId ) 
    {
        var result = context.CustomerTransaction.Where(c=>c.CustomerTransactionId == id)
         .Include(p=>p.ProductType)
         .Include(s=>s.StatusType);
    }


public class CustomerTransactionWebServiceRepository: IWebServiceRepository 
{
    public CustomerTransaction GetCustomerTransaction(int CustomerTransactionId ) 
        {
            var result = context.CustomerTransaction.Where(c=>c.CustomerTransactionId == id)
             .Include(p=>p.ProductType)
             .Include(s=>s.StatusType);
              .Select(p => new {
                      DateOfPurchase= c.DateOfPurchase, 
                      PurchaseAmount= c.PurchaseAmount, 
                      ProductName= p.ProductName
                      StatusDescription = s.StatusDescription
        }

Esempio di modello:

public class CustomerTransaction
{
    public int CustomerTransactionId { get; set; }
    public string DateOfPurchase{ get; set; }
    public int PurchaseAmount { get; set; }

    // relationships
    public ProductType ProductType { get; set; }
    public int ProductTypeId { get; set; } 

    public StatusType StatusType { get; set; }
    public int StatusID { get; set; }  
}
    
posta SkyPool392 28.05.2018 - 10:16
fonte

1 risposta

1

Quello che dovresti fare è creare un oggetto che corrisponda alle colonne della tua tabella. Quindi scrivi un repository che restituisce un elenco di tali oggetti. vale a dire:

select * from CustomerTransaction where x

Rimuovi gli oggetti figli da CustomerTransaction e non provare a creare un intero grafo di oggetti in un colpo solo.

Probabilmente puoi andare oltre. Immagino che alcuni dei tuoi oggetti xxxType siano simili a:

ProductType
int id              = 1
varchar type = 'widget'

Questi possono essere semplificati eliminando l'id, inserendo il campo 'type' nella tabella principale e mappandolo a un enum

    
risposta data 28.05.2018 - 12:10
fonte

Leggi altre domande sui tag