مشکل (ADOException) در هنگام ذخیره یک object بوسیله تکنولوژی NHibernate
سلام.
هنگامی که می خواهم یک object جدید را با استفاده از تکنولوژی NHibernate ذخیره کنم با خطای زیر رویرو میشم:
کد:
ADOException: could not insert: [Test.User][SQL: INSERT INTO User (Name, Family, Email) VALUES (?, ?, ?)].
کد مربوط به کلاسم بصورت زیر است:
کد:
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
publicclassUser
{
privateint id;
privatestring name;
privatestring family;
privatestring email;
publicvirtualint Id
{
get { return id; }
set { id = value; }
}
publicvirtualstring Name
{
get { return name; }
set { name = value; }
}
publicvirtualstring Family
{
get { return family; }
set { family = value; }
}
publicvirtualstring Email
{
get { return email; }
set { email = value; }
}
}
}
همپنین mapping file هم بصورت زیر است:
کد:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test" assembly="Test">
<class name="Test.User, Test" table="User">
<id name="Id" column="id_user" type="int" length="4">
<generator class="native" />
</id>
<property name="Name1" column="Name" type="String" length="20" />
<property name="Family1" column="Family" type="String" length="20" />
<property name="Email1" column="Email" type="String" length="50" />
</class>
</hibernate-mapping>
همچنین بلاک اصلی پروژه ام هم بصورت زیر است:
کد:
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using log4net;
using Iesi.Collections;
using Castle.DynamicProxy;
namespace Test
{
classMain
{
privatestaticConfiguration cfg;
privatestaticISessionFactory factory;
privatestaticISession session;
privatestaticString con = "Data Source=ALI;Initial Catalog=NHibernate;Integrated Security=True";
publicstaticvoid CreateHibernate()
{
cfg = newConfiguration();
cfg.SetProperty("hibernate.connection.provider", "NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty("hibernate.dialect", "NHibernate.Dialect.MsSql2000Dialect");
cfg.SetProperty("hibernate.connection.driver_class", "NHibernate.Driver.SqlClientDriver");
cfg.SetProperty("hibernate.connection.connection_string", con);
cfg.AddAssembly("Test");
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
User u = newUser();
u.Name = "Hamid";
u.Family = "Bostani";
u.Email =
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
;
session.Save(u);/*ADOException occured in this here*/
transaction.Commit();
session.Close();
}
}
}
در این جا باید به این مطلب اشاره کنم که فیلد کلید جدول User در پایگاه داده یعنی id_user بصورت Identity است.
همچنین StackTrace هم بصورت زیر است:
کد:
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session)
at NHibernate.Impl.ScheduledIdentityInsertion.Execute()
at NHibernate.Impl.SessionImpl.Execute(IExecutable executable)
at NHibernate.Impl.SessionImpl.DoSave(Object theObj, EntityKey key, IEntityPersister persister, Boolean replicate, Boolean useIdentityColumn, CascadingAction cascadeAction, Object anything)
at NHibernate.Impl.SessionImpl.DoSave(Object obj, Object id, IEntityPersister persister, Boolean useIdentityColumn, CascadingAction cascadeAction, Object anything)
at NHibernate.Impl.SessionImpl.SaveWithGeneratedIdentifier(Object obj, CascadingAction action, Object anything)
at NHibernate.Impl.SessionImpl.Save(Object obj)
at Test.Main.CreateHibernate() in C:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\Test\Main.cs:line 53
at Test.Form1.button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\Test\Form1.cs:line 20
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Test.Program.Main() in C:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\Test\Program.cs:line 17
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
لطفا اگر کسی هست که بتونه این مشکل را حل کنه کمک کنه!
در ضمن من تازه کار را با NHibernate شروع کردم اگر Ebook خوبی سراغ دارید، معرفی کنید.
متشکرم.