Erstellen einer SQLite-Datenbank mit NHibernate, aber nur einmal

Ich habe folgenden einige Beispiele zur Verwendung von NHibernate mit SQLite, und die meisten von Ihnen sind in Bezug auf unit-Test Datenbank CRUD-Operationen und all das. Also, die Beispiele, die ich habe gegoogelt und folgte so weit sind, alle damit in Zusammenhang. Das ist schön, aber das problem ist, dass jedesmal, wenn ich aus meinem Programm die Datenbank neu angelegt! Wie kann ich ändern, meinen code so, dass, wenn die Datenbank bereits besteht, NHibernate schafft es NICHT? Und ja, ich habe versucht, zu überprüfen, mit Datei.Existiert, aber es ignoriert; ich glaube, weil NHibernate bekommt, um die Datei zuerst.

Dies ist mein mapping:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory name="NHibernate.Test">
    <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
    <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
    <property name='proxyfactory.factory_class'>NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
    <property name="query.substitutions">true=1;false=0</property>
    <property name="show_sql">false</property>
  </session-factory>
</hibernate-configuration>

Und mein vollständiger code:

using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using NHibernate;
using NHibernate.Cfg;
using PruebaNHLite.Domain;

namespace PruebaNHLite
{
    public class Program
    {
        public static ISession sess;
        public static Configuration cfg;
        public static SQLiteConnection connection;
        private const string CONNECTION_STRING = 
                @"Data Source=nhlite.db;Pooling=true;FailIfMissing=false;
                                BinaryGUID=false;New=false;Compress=true;Version=3";

        static void Main(string[] args)
        {
            Init();
            BuildSchema();
            Insert();
            Retrieve();
            sess.Close();
            sess = null;
        }

        public static void Init()
        {
            //Initialize NHibernate
            cfg = new Configuration();
            cfg.Configure();
            IDictionary<string, string> props = new Dictionary<string, string>();
            props.Add("connection.connection_string", CONNECTION_STRING);
            props.Add("connection.driver_class", "NHibernate.Driver.SQLite20Driver");
            props.Add("dialect", "NHibernate.Dialect.SQLiteDialect");
            props.Add("proxyfactory.factory_class", "NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu");
            props.Add("query.substitutions", "true=1;false=0");
            props.Add("show_sql", "false");
            cfg.SetProperties(props);
            cfg.AddAssembly(typeof(Person).Assembly);
            connection = new SQLiteConnection(CONNECTION_STRING);
            connection.Open();

            //Get ourselves an NHibernate Session
            var sessions = cfg.BuildSessionFactory();
            sess = sessions.OpenSession();
        }

        private static void BuildSchema()
        {
            NHibernate.Tool.hbm2ddl.SchemaExport schemaExport
                = new NHibernate.Tool.hbm2ddl.SchemaExport(cfg);
            schemaExport.Execute(false, true, false, connection, null);
        }

        public static void Insert()
        {
            //Create a Person...
            var person = new Person
            {
                Name = "Almudena",
                Surname = "Pamplinas",
                Age = 5
            };

            //And save it to the database
            sess.Save(person);
            sess.Flush();
        }

        public static void Retrieve()
        {
            IQuery q = sess.CreateQuery("FROM Person");
            foreach (var p in q.List().Cast<Person>())
            {
                Console.WriteLine(string.Format("{0} {1}, de {2} años.", 
                                                p.Name, p.Surname, p.Age));
            }
            Console.ReadLine();
        }
    }
}
InformationsquelleAutor CMPerez | 2012-04-26
Schreibe einen Kommentar