come posso utilizzare Moles per reindirizzare selezionare dalle tabelle tramite LINQ?

StackOverflow https://stackoverflow.com/questions/4485502

  •  11-10-2019
  •  | 
  •  

Domanda

Ho una tabella chiamata Abbonamenti. Mi piacerebbe reindirizzare qualsiasi LINQ selezionare da quella tabella a una lambda talpe in modo che solo 3 righe vengono restituite da quel tavolo - in fondo io voglio bypass la chiamata al database. Finora, il codice che ho assomiglia a questo:

// lazy loader is here to handle successive calls to the 
// same table (otherwise there's an error)
// CM is a namespace alias
Table<CM.Subscriptions> subsTable = null;
MTheDataContext.AllInstances.SubscriptionsGet = (c) =>
    {
        if (subsTable == null)
        {
            subsTable = c.GetTable<CM.Subscriptions>();
            subsTable.Attach(new CM.Subscriptions() { SubID = 1, 
                 StatusCode = 1, CustomerID = custID1 });
            subsTable.Attach(new CM.Subscriptions() { SubID = 2, 
                 StatusCode = 1, CustomerID = custID2 });
            subsTable.Attach(new CM.Subscriptions() { SubID = 3, 
                 StatusCode = 4, CustomerID = custID3 });
            //  c.Refresh(RefreshMode.KeepCurrentValues, t);
        }
        return subsTable;
    };

Purtroppo non funziona. Ho circa 1000 righe della tabella sottoscrizioni nel database. Quando eseguo qualche codice di prova che ha questa reindirizzamento in esso, ottengo le 1000 righe dal database invece delle 3 file che si trovano nel metodo di reindirizzamento. Chiaramente mi manca qualcosa. Cosa posso fare per tornare solo questi 3 file ogni volta che eventuali seleziona codice di prova dal sottoscrizioni? Ho 3 chiamate a 3 tavoli diversi e tutti hanno bisogno di selezionare i dati che non è nel db per ottenere questo test per lavoro.

Chiarimento: la chiamata al metodo Redirected succede quando faccio una from sub in dc.Subscriptions ... selezionare. Ma le righe restituite non sono le righe che sono nel reindirizzamento.

È stato utile?

Soluzione

Sembra che stava facendo questo completamente sbagliato. Questo è l'approccio corretto:

// using System.Data.Linq.Moles; 
// CM is a namespace alias 
var subsList = new List<CM.Subscription>{
  new CM.Subscription() { SubscriptionID = subId1 },
  new CM.Subscription() { SubscriptionID = subId2 },
  new CM.Subscription() { SubscriptionID = subId3 }};

var subsTable = new MTable<CM.Subscription>();

subsTable.Bind(subsList.AsQueryable());

MTheDataContext.AllInstances.SubscriptionGet = (c) => { return subsTable; };

Con questo codice, qualsiasi selezione dal tavolo sottoscrizioni restituisce solo questi tre record.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top