Как я могу использовать Моли, чтобы перенаправить выбор из таблиц через 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; };
С этим кодом любой выбор из таблицы подписок будет возвращать только эти три записи.