Как мне написать строку подключения?

Я новичок в 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();
                }
            }
        }

Этот код, который я только что цитировал, почти идентичен руководству из tutorialspoint (название решения отличается). И у меня есть это исключение:

System.ArgumentException: Format of the initialization string does not conform to specification starting at index 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. Итак, мой вопрос: что я пропустил? И как я могу разрешить это исключение?

Спасибо за чтение.

Другие исключения, которые у меня есть:

Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll

Exception thrown: 'System.ArgumentException' in System.Data.dll

Exception thrown: 'System.ArgumentException' in NHibernate.dll

An unhandled exception of type 'System.ArgumentException' occurred in 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>
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
2
0
136
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исключение

System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0

относится к заявлению:

...But my x.ConnectionString is just identical with the instruction and I can not understand that what did I miss...

Потому что код объявляет параметры:

String DataSource = "(localdb)\\MSSQLLocalDB";
String InitialCatalog = "TutorialsPointDb";
String IntegratedSecurity = "True";
...

что не может быть просто объединено

x.ConnectionString = DataSource + InitialCatalog 
     + IntegratedSecurity + ConnectTimeout 
     + Encrypt + ...

Потому что это приведет к результату:

"(localdb)\\MSSQLLocalDBTutorialsPointDbTrue...

Но нам нужно что-то вроде этого:

x.ConnectionString = $"DataSource = {DataSource};"
    + $"InitialCatalog = {InitialCatalog};"
    + $"IntegratedSecurity = {IntegratedSecurity}"
    + ...

получить

"DataSource=(localdb)\\MSSQLLocalDB;InitialCatalog=TutorialsPointDb;..

И это приведет к ожидаемому формату строки подключения:

key1=value1;key2=value2;key3=value3;...

Большое спасибо. Ваш подробный ответ действительно помогает мне разрешить это исключение.

MediocreThingy 11.05.2018 16:26

Другие вопросы по теме