J'essaie de me connecter à la base de données existante dans Oracle avec fluentmapping. Je suis cartographie sur clientsFluent Nhibernate sur la base de données existante dans Oracle
public CustomerMapping()
{
Not.LazyLoad();
Id(x => x.Cst_Recid).GeneratedBy.Increment() ;
}
et je suis en train de créer la session
public static ISessionFactory CreateSessionFactory()
{
return Fluently
.Configure()
.Database(OracleClientConfiguration.Oracle10.ConnectionString
("...."))
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<CustomerMapping>();
})
.BuildConfiguration()
.BuildSessionFactory();
}
j'ai une classe d'essai pour essayer de créer le sessionFactory
public class MyDataProvider
{
public static Customer GetCustomerById(long customerId)
{
ISessionFactory sessionFactory = SessionFactory.CreateSessionFactory();
ISession session = sessionFactory.OpenSession();
return session.Linq<Customer>().Where(x => x.Cst_Recid.Equals(temp)).FirstOrDefault();
}
}
Je ne suis pas capable d'obtenir le client par l'identification même si je commence à ouvrir la session et l'activation ...
le test est très simple - que pour vérifier l'activité de sélection
[Test]
public void CanGetCustomerById()
{
MyDataProvider provider = new MyDataProvider();
Assert.AreEqual(33941, MyDataProvider.GetCustomerById(33941).Cst_Recid);
}
il y a une erreur -
TestCase '... DataLayer.Tests.CustomerMappingTests.CanGetCustomerById' a échoué: NHibernate.ADOException : Impossible d'exécuter la requête [select * from (SELECT this_.Cst_Recid comme Cst1_0_0_, this_.Cst_Customerid comme Cst2_0_0_, this_.Cst_First_Name comme Cst3_0_0_, this_.Cst_Group_Recid comme Cst4_0_0_, this_.Cst_Insdbdt comme Cst5_0_0_, this_.Cst_Insdbuser comme Cst6_0_0_, this_. Cst_Joingroup_Dt en tant que Cst7_0_0_, this_.Cst_Last_Name en tant que Cst8_0_0_, this_.Cst_Lastupddt en tant que Cst9 _0_0_, this_.Cst_Lastupduser comme Cst10_0_0_, this_.Cst_Tat_Lakoach_Meshalem comme Cst11_0_0_, this_.Cst_Typeid comme Cst12_0_0_, this_.Cst_Tziyun_Meshalem_Rashi_Only comme Cst13_0_0_, this_.Cst_Tziyun_Mizdamen comme Cst14_0_0_ DE "Client" this_ OÙ this_.Cst_Recid =: p0) où rownum < =: p1 ] paramètres positionnels: # 0> 33941 [SQL: select * from (sELECT this_.Cst_Recid comme Cst1_0_0_, this_.Cst_Customerid comme Cst2_0_0_, this_.Cst_First_Name comme Cst3_0_0_, this_.Cst_Group_Recid comme Cst4_0_0_, this_.Cst_Insdbdt comme Cst5_0_0_, this_. Cst_Insdbuser comme Cst6_0_0_, this_.Cst_Joingroup_Dt comme Cst7_0_0_, this_.Cst_Last_Name comme Cst8_0_0_, this_.Cst_Lastupddt comme Cst9_0_0_, this_.Cst_Lastupduser comme Cst10_0_0_, this_.Cst_Tat_Lakoach_Meshalem comme Cst11_0_0_, this_.Cst_Typeid comme Cst12_0_0_, this_.Cst_Tziyun_Meshalem_Rashi_Only comme Cst13_0_0_, comme this_.Cst_Tziyun_Mizdamen Cst14_0_0_ FROM "Client" this_ OERE this_.Cst_Recid =: p0) Où rownum < =: p1] ----> System.Data.OracleClient.OracleException: ORA-00942: table ou vue n'existe pas
la requête qu'il tente d'exécuter est construit par FluentNHibernate automatiquement. Si je supprime le quoates la requête s'exécute correctement, il obtient le résultat .. le problème est que je ne peux pas changer la requête comme je veux .. peut-être le problème est que nous utilisons Oracle 11 g et FluentNhibernate ajusté seulement à Oracle 9 ou dix ?
appreceate toute aide.
Vous n'avez pas besoin de créer une fabrique de sessions pour chaque requête à la base de données. Créez-le une fois, puis laissez-le vous renvoyer des sessions à chaque fois. –
Salut à tous. Merci de répondre . Le problème n'est pas celui de seesionFasctory, mais la requête en cours de construction n'est pas correcte. la question est pourquoi et comment puis-je l'ajuster afin qu'il "obtienne moi l'entité client .. bien sûr, après l'épreuve de concept je vais changer l'approche .. –