2013-04-03 2 views
1

Я новичок в NHibernate, поэтому я не совсем уверен, что я делаю неправильно. Я в настоящее время получаю это сообщение:Ошибка вставки Nhibernate (GenericADOException)

не мог вставить: [NhibernateTest.Domain.Order # 5ed0d146-644b-44ff-A080-f8cf3048158e] [SQL: INSERT INTO Order (OrderName, ShippingAddress, ShippingDate, OrderID) VALUES (?,?,?,?)]

Я пытаюсь сделать основной вставки в моей базе данных, которая имеет только одну таблицу.

Мой домен-класс:

public class Order 
{ 
    public virtual Guid OrderID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string ShipAddress { get; set; } 
    public virtual string ShipDate { get; set; } 

    public Order() 
    { 

    } 

    public Order(string name, string shipAddress, string shipDate) 
    { 
     Name = name; 
     ShipAddress = shipAddress; 
     ShipDate = shipDate; 
    } 
} 

И мое отображение:

<?xml version="1.0" encoding="utf-8" ?> 
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NhibernateTest" namespace="NhibernateTest.Domain"> 
    <class name="Order" table="Order" lazy="true"> 
     <id name="OrderID" column="OrderID"> 
      <generator class="guid" /> 
     </id> 
     <property name="Name" column="OrderName" type="string" /> 
     <property name="ShipAddress" column="ShippingAddress" type="string" /> 
     <property name="ShipDate" column="ShippingDate" type="string" /> 
    </class> 
</hibernate-mapping> 

Мой OrderRepository:

public void Add(Order order) 
    { 
     /* Open up a session to the database. */ 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      /* Open up a transaction to the database since an order object will be added. */ 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Save(order); 
       transaction.Commit(); 
      } 
     } 
    } 

и вот мой AddMethod, а также мой loadCfg-функция:

 [HttpPost] 
    public ActionResult AddOrder(FormCollection form) 
    { 
     LoadNHibernateCfg(); 

     OrderRepository repo = new OrderRepository(); 

     var order = new Order { Name = form[0], ShipAddress = form[1], ShipDate = form[2] }; 
     //order.Name = form[0]; 
     //order.ShipAddress = form[1]; 
     //order.ShipDate = form[2]; 

     repo.Add(order); 

     return Index(); 
    } 

    public static void LoadNHibernateCfg() 
    { 
     var cfg = new Configuration(); 
     cfg.Configure(); 
     cfg.AddAssembly(typeof (Order).Assembly); 
     new SchemaExport(cfg).Execute(true, false, true); 
    } 

Я знаю, что объект Order имеет информацию, когда он передается в .Add-функцию. Значит, я полагаю, что это должно быть связано с моим картографированием?

Благодаря

+0

Где ваша сессия/сделка объявлена? Где вы это совершаете? – Artless

+0

Я только что добавил, что часть кода – Alexander

+0

NHibernate обрабатывает ошибки очень хорошо. Вы можете проверить внутреннее большинство «InnerException» и опубликовать его здесь? – Artless

ответ

2

Order является зарезервированным ключевым словом. Например, при запросе на материал вы используете Order by. Вот список всех зарезервированных слов: http://msdn.microsoft.com/en-us/library/aa238507%28v=sql.80%29.aspx

Вы можете исправить это, просто изменив имя и картографию таблицы. Например, вы могли бы назвать таблицу Orders:

<class name="Order" table="Orders" lazy="true"> 
+0

Это было так просто!Спасибо :) – Alexander

+0

Добро пожаловать. – Artless

0

я получил ошибку, как: не удалось вставить: [RegEmails.Model.RegInfo] [SQL: INSERT INTO reg_info (MESSAGE_HASH, IS_INTERNAL, продукт, SERVER, VERSION, МОДУЛЬ, BRIDGE_LICENCE, BRIDGE_LICENCE_EXPIRY, BACK_OFFICE_LICENCE, BACK_OFFICE_LICENCE_EXPIRY, COMMENT, CREATE_DATE) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)]

у меня было что-то вроде

<id name="info_id" column="INFO_ID"> 
    <generator class="identity" /> 
</id> 
<property name="MessageHash" column="MESSAGE_HASH" length="512" /> 
<property name="IsInternal" column="IS_INTERNAL" /> 
<property name="Product" column="PRODUCT" /> 
<property name="Server" column="SERVER" /> 
<property name="Version" column="VERSION" /> 
<property name="Module" column="MODULE" /> 
<property name="BridgeLicence" column="BRIDGE_LICENCE" /> 
<property name="BridgeLicenceExpiry" column="BRIDGE_LICENCE_EXPIRY" /> 
<property name="BackofficeLicence" column="BACK_OFFICE_LICENCE" /> 
<property name="BackofficeLicenceExpiry" column="BACK_OFFICE_LICENCE_EXPIRY" /> 
<property name="Comment" column="COMMENT" /> 
<property name="CreateDate" column="CREATE_DATE" /> 

InnerException: Неизвестный столбец 'MESSAGE_HASH' в 'списке поля'

Я решается удалением

<id name="info_id" column="INFO_ID"> 
    <generator class="identity" /> 
</id> 
<property name="MessageHash" length="512" /> 
<property name="IsInternal" /> 
<property name="Product" /> 
<property name="Server" /> 
<property name="Version" /> 
<property name="Module" /> 
<property name="BridgeLicence" /> 
<property name="BridgeLicenceExpiry" /> 
<property name="BackofficeLicence" /> 
<property name="BackofficeLicenceExpiry" /> 
<property name="Comment" /> 
<property name="CreateDate" /> 

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