В настоящее время я пытаюсь заставить NHibernate работать с SAP Advantage Database Server 12. К сожалению, в Интернете мало информации об этом сервере баз данных, но в этом случае мне нужно использовать его для доступа к существующей базе данных.
Поэтому я попытался сначала создать простой тестовый проект, который добавляет «Студенты» в таблицу «Студент», а затем: https://www.tutorialspoint.com/nhibernate/nhibernate_basic_orm.htm
Что касается ADS, я нашел драйвер и диалектздесь: https://groups.google.com/forum/#!topic/nhibernate-development/s7HLs-aEXDk
Я создал таблицу и этот код:
private void button1_Click(object sender, EventArgs e)
{
var cfg = new Configuration();
cfg.DataBaseIntegration(x =>
{
x.ConnectionString = "data source=C:\\Users\\xxx\\Downloads;ServerType=local; TableType=ADT; Shared=True; LockMode=COMPATIBLE";
x.Driver<AdvantageDatabaseServerDriver>();
x.Dialect<AdvantageDatabaseServer8Dialect>();
x.LogSqlInConsole = true;
});
cfg.AddAssembly(Assembly.GetExecutingAssembly());
var sefact = cfg.BuildSessionFactory();
using (var session = sefact.OpenSession())
{
using (var tx = session.BeginTransaction())
{
//perform database logic
tx.Commit();
}
Console.ReadLine();
}
using (var session = sefact.OpenSession())
{
using (var tx = session.BeginTransaction())
{
var student1 = new Students
{
ID = 1,
FirstMidName = "Allan",
LastName = "Bommer"
};
var student2 = new Students
{
ID = 2,
FirstMidName = "Jerry",
LastName = "Lewis"
};
session.Save(student1);
session.Save(student2);
tx.Commit();
}
Console.ReadLine();
}
}
Но он продолжает выдавать это исключение при первой попытке записи:
NHibernate: INSERT INTO C:\Users\ad\Downloads\REFERENCE\Students.adt (LastName, FirstMidName) VALUES (?, ?); select NEWIDSTRING() from system.iota;p0 = 'Glenn' [Type: String (-1:0:0)], p1 = 'Allan' [Type: String (-1:0:0)]
Exception thrown: 'Advantage.Data.Provider.AdsException' in NHibernate.dll
Возможно, что-то не так с диалектом?Я очень ценю любую помощь в этом, спасибо!