странный linq к проблеме nhibernate, Недопустимому броску от 'Системы. Int32', [закрытый]

Условия штурвала оцениваются в значениях верхнего родителя:

Условие - поле условия содержит один или несколько путей YAML (разделенных запятыми). Если этот путь существует в значениях верхнего родительского элемента и разрешается в логическое значение, диаграмма будет включена или отключена на основе этого логического значения

blockquote>

. Ознакомьтесь с условиями в требованиях. yaml из стабильного / эластичного стека:

- name: elasticsearch
  version: ^1.17.0
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: elasticsearch.enabled
- name: kibana
  version: ^1.1.0
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: kibana.enabled
- name: logstash
  version: ^1.2.1
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: logstash.enabled

Пути условий: elasticsearch.enabled, kibana.enabled и logstash.enabled, поэтому их нужно использовать в значениях родительской диаграммы. [119 ]

12
задан Daniel Schilling 24 October 2013 в 17:57
поделиться

4 ответа

Я полагаю, что проблема состоит в том, что Linq/NHibernate пытается отобразить IEntity. Идентификатор к столбцу таблицы вместо TEntity. Идентификатор. У меня была эта проблема с реализацией репозитория LinqToSql. Путь вокруг этого состоял в том, чтобы использовать выражение как это:

private static Expression<Func<TEntity, bool>> GetFindExpression(string propertyName, object value)
{
    ParameterExpression parameterExpression = Expression.Parameter(typeof (TEntity), "id");
    MemberExpression propertyExpression = Expression.Property(parameterExpression, propertyName);

    Expression bodyExpression = Expression.Equal(propertyExpression, Expression.Constant(value));

    return Expression.Lambda<Func<TEntity, bool>>(bodyExpression, parameterExpression);
}

Таким образом, это изменилось бы, Добираются (идентификатор) до:

public TEntity Get(int id)
{
    var entities = Query.Where(GetFindExpression("Id", id));
    return entities.FirstOrDefault();
}

Обновление:

Если Вы не хотите иметь дело с выражениями (они могут быть хитрыми!), Вы могли пользоваться библиотекой Dynamic LINQ, как описано Scott Guthrie здесь: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

Это изменилось бы, Добираются (идентификатор) до:

public TEntity Get(int id)
{
    var entities = Query.Where("Id = @0", id);
    return entities.FirstOrDefault();
}
3
ответ дан 2 December 2019 в 23:20
поделиться

Я имею, столкнулся с этим в прошлом, и оно обычно сводится к полю в таблице базы данных, которую Вы читаете, не находится в совместимом формате. Как булевские переменные не преобразовывают в целые числа.

Проверьте свои типы поля в таблицу и удостоверьтесь, что они совместимы. Возможно, Ваш столбец Id является BIGINT?

1
ответ дан 2 December 2019 в 23:20
поделиться

У меня такая же проблема: (

Следующее не работает.

public override T Load(int id)
{
    return (from t in _sessionFactory.Session.Linq<T>()
            where t.ID == id 
            select t).SingleOrDefault();
}

Следующее работает!

public override Product Load(int id)
{
    return (from t in _sessionFactory.Session.Linq<Product>()
            where t.ID == id
            select t).SingleOrDefault();
}
1
ответ дан 2 December 2019 в 23:20
поделиться

Об ошибке сообщили, но еще не исправили:

https://nhibernate.jira.com/browse/NHLQ-11

Я опубликовал простой тестовый пример, чтобы воспроизвести его.

Будем надеяться. он скоро будет рассмотрен!

1
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

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