Eh bien, c'est mon tout premier projet avec hibernate. J'ai eu une petite expérience en hibernation et nhibernate.Comment tester générer des tables avec nhibernate fluide (schemaexport)? dans le contexte d'asp.net
Ce contexte est complètement nouveau pour moi puisqu'il s'agit d'un projet d'application web. J'ai donc mon projet webapp avec la plupart des nhibernate couramment trouvés sur le net. donc j'avoir cette entités:
namespace myproject.model
{
public class Request
{
public virtual string Id { get; private set; }
public virtual Route route { get; set; }
public virtual int code { get; set; }
}
}
namespace myproject.model
{
public class Route
{
public virtual string Id { get; private set; }
public virtual string client_id { get; set; }
public virtual IList<Request> requests { get; set; }
public Route()
{
requests = new List<Request>();
}
}
}
//Mapping are like this.will only post one
namespace myproject.mappings
{
public class RequestMap : ClassMap<Request>
{
public RequestMap()
{
Id(x => x.Id);
Map(x => x.short_code);
References(x => x.route);
}
}
}
//NhibernateSessionPerRequest
namespace myproject.Boostrap
{
public class NhibernateSessionPerRequest : IHttpModule
{
private static readonly ISessionFactory _sessionFactory;
static NhibernateSessionPerRequest()
{
_sessionFactory = CreateSessionFactory();
}
//all others IHttpModule event and methods are here
private static ISessionFactory CreateSessionFactory()
{
FluentConfiguration configuration = Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.
ConnectionString(x => x.FromConnectionStringWithKey("localdb")))
.Mappings(m => {
m.FluentMappings.AddFromAssemblyOf<myproject.model.Request>();
m.FluentMappings.AddFromAssemblyOf<myproject.model.Route>();
}
).ExposeConfiguration((c)=> savedConfig = c);;
return configuration.BuildSessionFactory();
}
}
private static Configuration savedConfig;
public static void BuildSchema(NHibernate.Cfg.Configuration config)
{
new SchemaExport(config).Create(false, true);
}
public static void BuildSchema(ISession session)
{
var export = new SchemaExport(savedConfig);
export.Execute(false,true,false,session.Connection,null);
}
}
J'ai ajouté le module dans webconfig
<add name="NhibernateSessionPerRequest" type="myproject.Boostrap.NhibernateSessionPerRequest"/>
afin de tester la génération des tableaux que j'ai ajouté un projet de test (bibliothèque de classes) ajoutée réf à nunit.framework 2.8.5 et myproject.
namespace myproject.Tests
{
[TestFixture]
public class CanGenerateSchemaTestSuite
{
[Test]
public void CanGenarateSchema()
{
NhibernateSessionPerRequest.BuildSchema(NhibernateSessionPerRequest.GetCurrentSession());
}
}
}
la méthode de test échoue toujours, et je vais avoir cette exception:
CanGenerateSchemaTestSuite (1 essai), 1 test a échoué: test de l'enfant n'a pas CanGenarateSchema, Échec: System.TypeInitializationException
alors comment tester est fait dans un contexte asp.net ?? merci de lire ceci.thanks
oh c'était vraiment gentil de vous.J'ai vu l'astuce. Mais une autre préoccupation reste.Pour le look de if.I J'aurai à le faire dans ma classe 'NhibernateSessionPerRequest' et' BuildSchem'a serait rendu privé. Alors comment est-ce que je lance la méthode 'BuildSchema', encore plus loin comment l'exécuter dans mon' projet de test'? merci –
Comme vous pouvez le voir, j'ai mon propre ISessionFactoryProvider qui est DI-ed dans le singleton de la fabrique de sessions. Pour le test unitaire, j'utilise un test qui fait aussi la construction. Est-ce que c'est ce que vous vouliez dire par la question? – Aliostad
Bonjour je n'utilise aucune sorte de librairie Dependency Injection, mon problème ici est de ne pas être capable de comprendre comment tester ceci dans un projet séparé (signifiant mon testproject), j'ai mis à jour le titre de ce post et ajouté nouvelles approches que j'ai obtenu de votre réponse. S'il vous plaît laissez-moi savoir si je me trompe.Merci pour votre temps –