2

Salut, je commence à apprendre Fluent NHibernate. J'utilise ce tutoriel http://www.d80.co.uk/post/2011/02/20/Linq-to-NHibernate-Tutorial.aspx.Fluent NHibernate - toujours déposer la table

Voici mon exemple de code:

public class Account 
{ 
    public virtual int Id { get; set; } 
    public virtual string Nick { get; set; } 
    public virtual string Password { get; set; } 
} 

public class AccountMap:ClassMap<Account> 
{ 
    public AccountMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Nick); 
     Map(x => x.Password); 
    } 
} 

public class NHiberanteHelper 
{ 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
       InitializeSessionFactory(); 

      return _sessionFactory; 
     } 
    } 

    private static void InitializeSessionFactory() 
    { 

     _sessionFactory = Fluently.Configure() 

      //NHibernate bude pouzivat ovladace pre MS SQL 2008 
      .Database(MsSqlConfiguration.MsSql2008 
          .ConnectionString(
           @"Server=JAN-MSI\SQLEXPRESS;Database=SimpleNHibernate;Trusted_Connection=True;").ShowSql() 
          ) 

      //urci NHibernatu kde ma hladat mapovacie subory 
      .Mappings(m=>m.FluentMappings.AddFromAssemblyOf<Account>()) 

      //ak tabs nie su v DB vytvori 
      .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true)) 

      //vytvori jeden session pre cely life-time apps 
      .BuildSessionFactory(); 
    } 

    public static ISession OpenSession() 
    { 
     return SessionFactory.OpenSession(); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var session = NHiberanteHelper.OpenSession()) 
     { 
      using (var trans = session.BeginTransaction()) 
      { 
       var account = new Account 
            { 
             Nick = "dfdwf", 
             Password = "xxx" 
            }; 
       session.Save(account); 
       trans.Commit(); 

      } 
     } 
     Console.ReadKey(); 
    } 
} 

Le problème est que cette configuration Fluent baisse toujours la table dans la base de données.

Je n'ai besoin que de vérifier si la table n'existe pas alors créez une table pas toujours lorsque le code est exécuté.

Répondre

4

Votre appel au new SchemaExport(cfg).Create(true, true) exporte la configuration vers la base de données. .. Cela va supprimer et recréer (il est pas assez intelligent pour travailler les différences et juste les exécuter

Vous pouvez utiliser SchemaUpdate, qui mettra à jour le schéma à la place Voici un blog à ce sujet: http://geekswithblogs.net/dotnetnomad/archive/2010/02/22/138094.aspx

Je préfèrerais toujours mettre à jour les tables moi-même ou utiliser quelque chose comme SQLCompare de Redgate pour mettre à jour un schéma tout en préservant les données

+0

Merci beaucoup pour la réponse –