FluentMapping으로 oracle의 기존 db에 연결하려고합니다. 나는 고객oracle의 레거시 데이터베이스에 대한 Fluent Nhibernate
public CustomerMapping()
{
Not.LazyLoad();
Id(x => x.Cst_Recid).GeneratedBy.Increment() ;
}
이상 매핑을 얻고 난 내가없는 오전 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();
}
}
을 시도하고 만들 수있는 몇 가지 시험 클래스가 세션을
public static ISessionFactory CreateSessionFactory()
{
return Fluently
.Configure()
.Database(OracleClientConfiguration.Oracle10.ConnectionString
("...."))
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<CustomerMapping>();
})
.BuildConfiguration()
.BuildSessionFactory();
}
을 만들려고하고 있어요 세션을 열고 정품 인증을 받고 있는데도 ID로 고객을 확보 할 수 있습니다 ...
,210시험은 매우 간단합니다 - 단지 실수가
[Test]
public void CanGetCustomerById()
{
MyDataProvider provider = new MyDataProvider();
Assert.AreEqual(33941, MyDataProvider.GetCustomerById(33941).Cst_Recid);
}
선택 활동 확인 -
TestCase에 '... DataLayer.Tests.CustomerMappingTests.CanGetCustomerById' 실패를 : NHibernate.ADOException : 쿼리를 실행할 수 없습니다 [* FROM (Cst6_0_0_ 같은 Cst1_0_0_, this_.Cst_Customerid Cst2_0_0_로서 this_.Cst_First_Name Cst3_0_0_로서 this_.Cst_Group_Recid Cst4_0_0_로서 this_.Cst_Insdbdt Cst5_0_0_로서 this_.Cst_Insdbuser, this_ this_.Cst_Recid로 선택한다. Cst_Joingroup_Dt를 Cst7_0_0_, this_.Cst_Last_Name을 Cst8_0_0_, this_.Cst_Lastupddt를 Cst9로 지정하십시오. P0) 여기서 ROWNUM < = : P1 _0_0_, Cst10_0_0_, Cst11_0_0_ 같은 this_.Cst_Tat_Lakoach_Meshalem 같은 this_.Cst_Lastupduser는 this_ WHERE this_.Cst_Recid = "고객"의 Cst14_0_0_ 같은 Cst12_0_0_, Cst13_0_0_ 같은 this_.Cst_Tziyun_Meshalem_Rashi_Only, this_.Cst_Tziyun_Mizdamen로 this_.Cst_Typeid ] 위치 매개 변수 # 0> 33,941 [SQL SELECT *은 (Cst4_0_0_ 같은 Cst1_0_0_, this_.Cst_Customerid Cst2_0_0_로서 this_.Cst_First_Name Cst3_0_0_로서 this_.Cst_Group_Recid, Cst5_0_0_ 같은 this_.Cst_Insdbdt, this_ this_.Cst_Recid로 선택한다. Cst6_0_0_, Cst7_0_0_ 같은 this_.Cst_Joingroup_Dt, Cst8_0_0_ 같은 this_.Cst_Last_Name, Cst9_0_0_ 같은 this_.Cst_Lastupddt, Cst10_0_0_ 같은 this_.Cst_Lastupduser, Cst11_0_0_ 같은 this_.Cst_Tat_Lakoach_Meshalem 같은 Cst_Insdbuser는 Cst13_0_0_뿐만 아니라 this_.Cst_Tziyun_Mizdamen Cst12_0_0_, this_.Cst_Tziyun_Meshalem_Rashi_Only로 this_.Cst_Typeid Cst14_0_0_ FROM "고객"this_ WHERE this_.Cst_Recid = : p0) 여기서 ROWNUM < = P1] ----> System.Data.OracleClient.OracleException : ORA-00942 : 테이블 또는 뷰가
그는 FluentNHibernate에 의해를 automaticly 구축되어 실행하려고하는 쿼리를 존재하지 않습니다. 쿼리를 바로 실행하면 quoates를 제거하면 결과가 나타납니다. 문제는 내가 원하는대로 쿼리를 변경할 수 없다는 것입니다. 어쩌면 문제는 Oracle 11g를 사용하고 있으며 FluentNhibernate가 Oracle 9 또는 10?
은 도움이 될 것입니다.
데이터베이스에 대한 모든 쿼리에 대해 세션 팩토리를 만들 필요가 없습니다. 한 번 작성한 다음 매회마다 세션을 반환하도록하십시오. –
안녕하세요. 대답 해줘서 고마워 . 문제는 seesionFasctory가 아니라 올바르게 구축되지 않은 쿼리입니다. 질문은 왜, 어떻게 조정할 수 있을까요? 고객 엔티티를 가져올 것입니다. 물론 개념 증명을 통해 접근 방식을 변경하게됩니다. –