Я обнаружил, что не понимаю, что такое отложенная загрузка и т. Д.
Во-первых, эквивалентны ли эти два утверждения:
(1) Lazy loading:
_flaggedDates = context.FlaggedDates.Include("scheduledSchools")
.Include ("interviews").Include("partialDayAvailableBlocks")
.Include("visit").Include("events");
(2) Eager loading:
_flaggedDates = context.FlaggedDates;
Другими словами, в (1) " Включает "вызывает загрузку коллекций / свойств навигации вместе с конкретной запрошенной коллекцией, независимо от того, что вы используете ленивую загрузку ... верно?
И в (2) оператор загрузит все объекты навигации даже если вы специально не запрашиваете их, потому что вы используете активную загрузку ... не так ли?
Во-вторых: даже если вы используете активную загрузку, данные не будут фактически загружены из базы данных, пока вы не «перечислите перечислимое» , как в следующем коде:
var dates = from d in _flaggedDates
where d.dateID = 2
select d;
foreach (FlaggedDate date in dates)
{
... etc.
}
Данные не будут фактически загружены («перечислены») до цикла foreach ... верно? Другими словами, " тестируется.
Было бы неплохо, если бы можно было как-то сказать:
if( flag.IsSet( ReallyBigEnum.AnotherOption ) ) { ... }
но перечисления не поддерживают методы экземпляра. Итак, я попробовал использовать шаблонную функцию:
class Enums
{
public static bool IsSet<T>( T flag, T bit ) { return (flag & bit) == bit; }
}
, но код для проверки битов тогда выглядит так:
if( Enums.IsSet<ReallyBigEnum>( flag, ReallyBigEnum.AnotherOption ) ) { ... }
, что очень много для написания. Затем я попытался сократить его:
class Enums
{
public static bool IsSet( int flag, int bit ) { return (flag & bit) == bit; }
}
, но тогда вам нужно привести каждое значение к его базовому типу следующим образом:
if( Enums.IsSet( (int)flag, (int)ReallyBigEnum.AnotherOption ) ) { ... }
, что также затрудняет кодирование и теряет преимущества проверки типов.
Та же функция могла бы быть написанным с использованием параметров объекта, но тогда тип объекта и базовый тип должны быть протестированы.
Итак, я придерживаюсь стандартного, избыточного способа наверху.
Есть ли у кого-нибудь другие идеи относительно чистого, простого способа тестирования бита Enum поля?
Большое спасибо.