Я новичок в Nhibernate. Я установил NHibernate с помощью NuGet.
Существует множество учебных пособий по NHibernate, но большинство из них действительно старые (все они представлены в Microsoft VS 2008). За исключением этого из TutorialsPoint . Поэтому я попытался следовать этому уроку шаг за шагом. Это моя Program.cs:
class Program
{
static void Main(string[] args)
{
var cfg = new Configuration();
String DataSource = "(localdb)\\MSSQLLocalDB";
String InitialCatalog = "TutorialsPointDb";
String IntegratedSecurity = "True";
String ConnectTimeout = "30";
String Encrypt = "False";
String TrustServerCertificate = "False";
String ApplicationIntent = "ReadWrite";
String MultiSubnetFailover = "False";
cfg.DataBaseIntegration(x =>
{
x.ConnectionString = DataSource + InitialCatalog + IntegratedSecurity + ConnectTimeout + Encrypt +
TrustServerCertificate + ApplicationIntent + MultiSubnetFailover;
x.Driver<SqlClientDriver>();
x.Dialect<MsSql2008Dialect>();
});
cfg.AddAssembly(Assembly.GetExecutingAssembly());
var sefact = cfg.BuildSessionFactory();
using (var session = sefact.OpenSession())
{
using (var tx = session.BeginTransaction())
{
var student1 = new Student
{
ID = 1,
FirstMidName = "Allan",
LastName = "Bommer"
};
var student2 = new Student
{
ID = 2,
FirstMidName = "Jerry",
LastName = "Lewis"
};
session.Save(student1);
session.Save(student2);
tx.Commit();
}
Console.ReadLine();
}
}
}
Этот код, который я просто написал, почти идентичен учебнику с точки зрения руководства (название решения отличается). И у меня есть это исключение:
System.ArgumentException: формат строки инициализации не
соответствовать спецификации, начиная с индекса 0
из этой строки: var sefact = cfg.BuildSessionFactory();
И после исследования, насколько я понимаю, это исключение было вызвано плохим ConnectionString
. Но мой x.ConnectionString
просто идентичен инструкции и я не могу понять, что я пропустил.
И я осведомлен о том, что обычно есть имя данных: 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="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=localdb\mssqllocaldb;Initial Catalog=TutorialsPointDb</property>
<property name="show_sql">false</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<mapping assembly="DataTransfer"/>
</session-factory>
</hibernate-configuration>
Но не на этом шаге: Создание данных из NHibernate - часть Основные операции CRUD.
Итак, мой вопрос, что я пропустил? И как я могу разрешить это исключение?
Спасибо за чтение.
Другие исключения, которые я получил:
Исключение: «System.IO.FileNotFoundException» в файле mscorlib.dll
Возникло исключение: System.ArgumentException в System.Data.dll
Возникло исключение: System.ArgumentException в NHibernate.dll
Необработанное исключение типа 'System.ArgumentException' произошло в
NHibernate.dll
Другие коды из моего проекта на случай, если вы захотите проверить сами.
Моя база данных:
CREATE TABLE [dbo].[Student]
(
[ID] INT NOT NULL PRIMARY KEY IDENTITY,
[LastName] NVARCHAR(MAX) NULL,
[FirstMidName] NVARCHAR(MAX) NULL
)
Это мой единственный класс Student.cs
namespace TutorialsPoint
{
public class Student
{
public virtual int ID { get; set; }
public virtual string LastName { get; set; }
public virtual string FirstMidName { get; set; }
}
}
И его файл Student.hbm.xml
<?xml version = "1.0" encoding = "utf-8" ?>
<hibernate-mapping xmlns = "urn:nhibernate-mapping-2.2"
assembly = "TutorialsPoint" namespace = "TutorialsPoint">
<class name = "Student">
<id name = "ID">
<generator class = "native"/>
</id>
<property name = "LastName"/>
<property name = "FirstMidName"/>
</class>
</hibernate-mapping>