“Никакой стойкий организм для” ошибки с NHibernate, NHibernate. Linq и Fluent Mapping

Я использую Nhibernate 2.1.2.4000 GA с Nhibernate. Linq 1.0 и последняя версия FluentNhibernate загружаются от ведущего устройства на GitHub.

Я делаю некоторые тесты и каждый раз, когда я пытаюсь удалить объект, полученный запросом linq, я получаю эту ошибку:

Никакой стойкий организм для: NHibernate. Linq. Запрос '1 [[Сотрудники. Ядро. Объекты. Сотрудник, Сотрудники. Ядро, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

Все другие операции (вставляют, обновляют и выбирают), выглядит хорошо;

Мой класс Объекта:

public class Employee
{
    public Employee()
    {
    }

    public virtual Int32 Id { get; private set; }
    public virtual String Name { get; set; }    

    public virtual String SayHello()
    {
        return String.Format("'Hello World!', said {0}.", Name);
    }
}

Отображение класса:

public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        Id(x => x.Id);
        Map(x => x.Name)
            .Not.Nullable()
            .Length(50);
    }
}

Конфигурация:

Assembly mappingsAssemly = Assembly.GetExecutingAssembly();

return Fluently.Configure()
    .Database( MsSqlConfiguration.MsSql2008
                    .ConnectionString(connectionString)
                    .ProxyFactoryFactory(typeof(ProxyFactoryFactory))
                    .ShowSql())                            
    .Mappings( m => m.FluentMappings.AddFromAssembly(mappingsAssemly))
    .BuildSessionFactory();

И код, который не работает:

public void RemoveAll()
{
    var q = from employee in _session.Linq<Employee>()
            select employee;

    foreach (var employee in q.ToList())
    {
        _session.Delete(q);
    }
}

Какие-либо мысли?

7
задан Stephan Bauer 12 May 2016 в 12:29
поделиться

3 ответа

Мы все пропустили!

Извините, ребята, и спасибо за всю вашу помощь, но я просто понял.

Если вы обратите внимание на метод RemovealL (), вы увидите, что я пытаюсь удалить объект «q», который не является объектом, но, а iQueriable вместо прохождения «сотрудника». Было отсутствие внимания.

Правильный код будет:

        public void RemoveAll()
        {
            var q = from employee in _session.Linq()
                    select employee;

            var p = q.ToList();

            foreach (var employee in p)
            {
                _session.Delete(employee);
            }
        }
6
ответ дан 7 December 2019 в 03:15
поделиться

Вы уверены, что сборка, которую вы поставляете в FNH ( Assembly.getExecutingAssembly () ) на самом деле тот, который содержит ваши сопоставления?

Измените ваш Сопоставления Вызов включить Exportto метод , который будет экспортировать любые отображения FNH, найдут в указанную папку; Проверьте содержимое этой папки и посмотрите, будут ли все отображения там. Если они есть, то шансы - это не проблема FNH и может быть проблемой с поставщиком LINQ (как сказал Майкл).

Mappings(
  m => m.FluentMappings
          .AddFromAssembly(mappingsAssemly)
          .ExportTo(@"C:\"));

Другое, что вы можете проверить, - это экземпляр конфигурации NhiberNate, который NH фактически использует. Для этого используйте BuildConfiguration вместо BuildSessionSessionSessional и проверьте результат; Есть классы коллекция (или некоторое изменение этого), которое должно содержать все сопоставленные объекты.

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

2
ответ дан 7 December 2019 в 03:15
поделиться

Это может быть просто ошибка в поставщике LINQ. Возможно, вы захотите попытаться воспроизвести проблему по последнему багажнику Nhibernate, который включает в себя новый / другой поставщик LINQ. В качестве альтернативы, если вы (успешно) удалите свободно, Nibernate из уравнения, вы, вероятно, можете (относительно легко) отправить отчет о тестовом случае / ошибках против поставщика LINQ.

1
ответ дан 7 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

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