2011-05-01 3 views
1

J'ai appris que la seule façon de permettre aux contraintes FK dans SQLite est d'activer cette pragma:permettant ForeignKeys SQLite dans NHibernate

PRAGMA foreign_keys = ON; 

Mais malheureusement, si je comprends bien, je vais devoir exécuter cette interroger au début de chaque session. Ai-je raison? Comment puis-je le faire "automatiquement" avec NHibernate? Y a-t-il un moyen de se brancher sur NH et de l'exécuter juste après l'ouverture de la session? J'utilise NH 3.0.

Répondre

7

Ok, j'ai trouvé la réponse qui fonctionne pour moi. Crédits va à James Kovacs (similar question)

J'ai créé mon propre pilote basé sur l'SQLite20Driver et la méthode CreateConnection surchargée (code est de James' GitHub)

public override IDbConnection CreateConnection() 
    { 
     DbConnection connection = (DbConnection)base.CreateConnection(); 
     connection.StateChange += Connection_StateChange; 
     return connection; 
    } 

    private static void Connection_StateChange(object sender, StateChangeEventArgs e) 
    { 
     if ((e.OriginalState == ConnectionState.Broken || e.OriginalState == ConnectionState.Closed || e.OriginalState == ConnectionState.Connecting) && 
      e.CurrentState == ConnectionState.Open) 
     { 
      DbConnection connection = (DbConnection)sender; 
      using (DbCommand command = connection.CreateCommand()) 
      { 
       // Activated foreign keys if supported by SQLite. Unknown pragmas are ignored. 
       command.CommandText = "PRAGMA foreign_keys = ON"; 
       command.ExecuteNonQuery(); 
      } 
     } 
    } 

fonctionne comme un charme :).

+0

Vous pouvez accepter votre propre réponse. Et vous devriez probablement. –

+0

Oui je devrais, et je le ferai dans deux jours quand stackoverflow me le permettra :). – ppiotrowicz

Questions connexes