2015-04-29 2 views
0

Исключение:Не удалось собрать отображение документа в NHibernate

Не удалось собрать отображение документа: WindowsFormsApplication2.Products.hbm.xml

и внутреннее исключение составляет:

Стойкий класс Sample.CustomerService.Domain.Products, Sample.CustomerService. Домен не найден

моя конфигурация:

config file ,i could not paste here because of error ,i did not accept all code hare so i put a link here

and this is mapping file.

А класс для отображения является

namespace Sample.CustomerService.Domain 
{ 
    public class Product 
    { 
     public virtual int Productid { get; set; } 
     public virtual string Name { get; set; } 
    } 
} 

и сессионный фабрика

public sealed class SessionFactory 
{  
    private static volatile ISessionFactory iSessionFactory; 
    private static object syncRoot = new object(); 

    public static ISession OpenSession 
    { 
     get 
     { 
      if (iSessionFactory == null) 
      { 
       lock (syncRoot) 
       { 
        if (iSessionFactory == null) 
        { 
         Configuration configuration = new Configuration(); 
         configuration.AddAssembly(Assembly.GetCallingAssembly()); 
         iSessionFactory = configuration.BuildSessionFactory(); 
        } 
       } 
      } 
      return iSessionFactory.OpenSession(); 
     } 
    } 
} 

, когда я пытаюсь получить запись с помощью этого кода

using (ISession session = SessionFactory.OpenSession) 
{ 
    IQuery query = session.CreateQuery("FROM Products"); 
    IList<Products> pInfos = query.List<Products>(); 
    dgView.DataSource = pInfos; 
} 

он дает мне ошибку, не может компилировать отображение документа, как описано выше. Я новичок в hibernate, я добавил hibernte из nugget.org, управляя параметром nugget pcakage в visual studio 2012, он добавил две dlls nhhibernate и Iesi.collections. пожалуйста, помогите мне исправить эту ошибку, я дал всю информацию, насколько мне известно.

+0

Не помещайте изображения. Вместо этого вставьте ** код **. – abatishchev

+0

См. Http://www.dofactory.com/net/singleton-design-pattern#net для (намного) лучшей реализации одного синглтона. – abatishchev

+0

Помните, что Hibernate (для Java) не совпадает с NHibernate (для .Net) и используйте правильное имя, пожалуйста. –

ответ

2

В вашем картографии у вас есть Продукты, и ваш класс называется Product (в единственном числе). Так оно и должно быть:

<class name="Product" table="Products" lazy="true"> 

BTW, ленивый по умолчанию для NHibernate, так что вы можете опустить его в отображении. Кроме того, если, как бы то ни было, имя таблицы совпадает с именем класса, которое вы также можете опустить, рекомендуется сохранить содержимое файла сопоставления при минимальном значении.

+0

после смены имени класса на продукты, получения такой же ошибки, на самом деле он мог быть изменен при вставке здесь как-то, но у меня есть одинаковые имена классов в xml-файле и cs.file –

+0

. Я создал этот файл сопоставления с помощью инструмента cubrid nmg. –

+0

Я отправляю intellitrace во время отладки \ http://www.use.com/CKGPI –

0

То, что мы должны были бы это отображение, как это:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    namespace="Sample.CustomerService.Domain" 
    assembly="Sample.CustomerService.Domain"> // expecting same as namespace hre 
    // as the xml sais: class name (C# class name) is Product, not Products 
    <class name="Product" table="Products" lazy="true" batch-size="25" > 
     // I would also from the beginning suggest to use batch-size="25" 

     // name must be equal to C# name, including case sensitivity 
     <id name="Productid" column="Product_ID" class="native" /> 

     // property could be expressed without the column, 
     // if C# name and column name are the same 
     <property not-null="false" name="Name" /> 

    </class>  
</hibernate-mapping> 

ПРИМЕЧАНИЕ: Проверьте больше о пакетной выборки здесь (в batch-size="25" details)

Теперь, если хотите запросить это - с помощью HQL, мы должен знать, что HQL построен поверх наших объектов C#. Мы должны использовать их точные имена:

Chapter 14. HQL: The Hibernate Query Language

NHibernate оснащен чрезвычайно мощным языком запросов, (вполне намеренно) очень похож на SQL. Но не следует обманывать синтаксис; HQL полностью объектно-ориентированный, понимая понятия, такие как наследование, полиморфизм и ассоциация.

14.1. Чувствительность к случаю

Запросы не чувствительны к регистру, за исключением имен.NET классы и свойства. Таким образом, SeLeCT совпадает с SELEct таким же, как SELECT, но Eg.FOO не является Eg.Foo и foo.barSet не является foo.BARSET.

А также (я бы добавил) особое и множественное число должно соответствовать. Итак, потому что мы имеем:

public class Product 
{ 
    ... 

Мы должны запросить, что, как это (удивлён, что вы были в состоянии построить это, потому что Products не в коде, просто Product).

using (ISession session = SessionFactory.OpenSession) 
{ 
    //IQuery query = session.CreateQuery("FROM Products"); 
    var query = session.CreateQuery("FROM Product"); // just Product 

    // here again 
    //IList<Products> pInfos = query.List<Products>(); 
    IList<Product> pInfos = query.List<Product>(); 
    ... 
+0

после смены имени класса на продукты, получения такой же ошибки, на самом деле это могло измениться при вставке здесь как-то, но у меня есть те же имена классов в файле xml и cs.file \t Я создал этот файл сопоставления с помощью инструмента cubrid nmg. \t \t я отправляю IntelliTrace во время отладки ;; HTTP: //www.use.com/CKGPI –

+0

проблема была с неправильным именем сборки в файле отображения, я случайно дал сборки назвать это была проблема, я думаю, я изменен то же имя сборки во всех местах, где оно работало. все еще я не знаю, что должно быть именем сборки при сопоставлении fie, я просто переименовал в windowsapplication2 во все пространство имен. | Могу ли я иметь другое пространство имен в form1.cs и файлах сопоставления? –

Смежные вопросы