Отключите всю отложенную загрузку или принудительную загрузку для контекста LINQ

В руководстве MySQL указано, что поля FLOAT, REAL, and DOUBLE PRECISION сохраняют значения как приблизительные, а поля INTEGER, SMALLINT, DECIMAL, and NUMERIC сохраняют значения как точные.

Я думаю, что лучше всего решить эту проблему с точностью до десятичной.

Ссылка: http://dev.mysql.com/doc/refman/5.1/en /numeric-types.html

14
задан Jake Wharton 3 August 2010 в 12:15
поделиться

2 ответа

Вам нужно будет установить DeferredLoadingEnabled , а затем включить каждое свойство, используя какое-либо отражение, например:

DataLoadOptions dataLoadOptions = new DataLoadOptions();

foreach (PropertyInfo pi in typeof(SomeThingyClass).GetProperties())
{
    ParameterExpression paramExp = Expression.Parameter(typeof(SomeThingyClass), "s");
    Expression expr = Expression.Convert(Expression.Property(paramExp, pi.Name), typeof(object));
    LambdaExpression lambda = Expression.Lambda(expr, paramExp);
    dataLoadOptions.LoadWith((Expression<Func<SomeThingyClass, object>>) lambda);
}
6
ответ дан 1 December 2019 в 16:31
поделиться

Это сложно в LINQ to SQL. Короткий ответ: это зависит от ситуации.

Если ваши сущности расположены таким образом, что у вас есть отношения, похожие на следующие:

Customers -> Orders -> OrderDetails

И вам нужно оценить свойства всех трех сущностей, чтобы принять решение, лучшим вариантом будет написать объединение. Использование .LoadWith позволит получить Customers и Orders с помощью одного оператора, но затем будет выдан запрос для каждой записи OrderDetails.

Таким образом, даже если вы укажете все дочерние отношения с помощью LoadWith, вы не получите единый запрос для получения результата.

0
ответ дан 1 December 2019 в 16:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: