Hi,
I am new to NHibernate, while using NHibernate with MySQL database I am getting error at transaction.Commit().
Error:
NHibernate.Exceptions.GenericADOException was unhandled HResult=-2146232832 Message=could not insert: [NHibernateMysql.Domain.Character#9d3b52dd-5fa2-4f3b-84fb-1d766994be30][SQL: INSERT INTO Character (name, Id) VALUES (?, ?)] Source=NHibernate SqlString=INSERT INTO Character (name, Id) VALUES (?, ?)
InnerException:
ErrorCode=-2147467259
HResult=-2147467259
Message=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Character (name, Id) VALUES ('MikeAbyss', '9d3b52dd-5fa2-4f3b-84fb-1d766994be30'' at line 1
Number=1064
Source=MySql.Data
StackTrace:
at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
at NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd)
at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation)
at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session)
InnerException:
Here is my Code:
Domain Class:
namespace NHibernateMysql.Domain
{
public class Character
{ public virtual Guid Id { get; set; }
public virtual string SName { get; set; }
}
}Character.hbm.xml
<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NHibernateMysql"
namespace="NHibernateMysql.Domain"><class name="Character"><id name="Id">
<column name="Id" />
<generator class="guid" />
</id><property name="SName"><column name="name" sql-type="varchar(45)" not-null="false"/></property></class></hibernate-mapping>hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?><hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"><session-factory><property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property><property name="dialect">NHibernate.Dialect.MySQL5Dialect</property><property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property><property name="connection.connection_string">Server=192.168.200.35;Database=NHibernate;User ID=root;Password=1234;</property><property name="show_sql">true</property></session-factory></hibernate-configuration>
NHibernateHelper.cs
namespace NHibernateMysql
{
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(Character).Assembly);
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
}CharacterRepository.cs
using NHibernate;
using NHibernateMysql.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NHibernateMysql
{
public class CharacterRepository
{
public void Add(Character newCharacter)
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(newCharacter);
transaction.Commit();
}
}
}
}
}
Program.cs
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using NHibernateMysql.Domain;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace NHibernateMysql
{
class Program
{
static void Main(string[] args)
{
LoadHibernateCfg();
/*CRUD*/
//CREATE!
CharacterRepository repo = new CharacterRepository();
var MikeAbyss = new Character { SName = "MikeAbyss" };
repo.Add(MikeAbyss);
Console.ReadKey();
}
public static void LoadHibernateCfg()
{
Configuration configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(Character).Assembly);
SchemaExport schemaExport = new SchemaExport(configuration);
schemaExport.SetDelimiter(";");
using (TextWriter stringWriter = new StreamWriter("create.mysql"))
{
schemaExport.Execute(false, false, false, null, stringWriter);
}
}
}
}
Please help!