Как я могу использовать Моли, чтобы перенаправить выбор из таблиц через LINQ?

У меня есть таблица под названием "Подписки". Я хотел бы перенаправить любой выбор LINQ из этой таблицы в лямбду Moles, чтобы из этой таблицы возвращалось только 3 строки - в основном я хочу обойти вызов к базе данных. Пока что код, который я имею, выглядит так:

// 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;
    };

К сожалению, это не работает. У меня есть около 1000 строк в таблице подписок в базе данных. Когда я запускаю некоторый тестовый код с этим перенаправлением, я получаю 1000 строк из базы данных вместо 3 строк, которые находятся в методе перенаправления. Я явно что-то упускаю. Что я могу сделать, чтобы возвращать только эти 3 строки всякий раз, когда какой-либо тестовый код выбирается из подписок? Я получил 3 вызова в 3 разные таблицы, и им всем нужно выбрать данные, которых нет в БД, чтобы этот тест заработал.

Пояснение: вызов перенаправленного метода действительно происходит, когда я делаю from sub in dc.Subscriptions ... Выбрать. Но возвращенные строки не являются строками, которые находятся в перенаправлении.

1 ответ

Решение

Похоже, я делал это совершенно неправильно. Это правильный подход:

// 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; };

С этим кодом любой выбор из таблицы подписок будет возвращать только эти три записи.

Другие вопросы по тегам