이제, 당신이 말을하기 전에 : 내가 했던 구글 내 hbm.xml
파일 입니다 포함 리소스.
다음은 내가 호출하는 코드입니다.
ISession session = GetCurrentSession();
var returnObject = session.Get<T>(Id);
클래스에 대한 내 매핑 파일은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="HQData.Objects.SubCategory, HQData" table="SubCategory" lazy="true">
<id name="ID" column="ID" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Name" column="Name" />
<property name="NumberOfBuckets" column="NumberOfBuckets" />
<property name="SearchCriteriaOne" column="SearchCriteriaOne" />
<bag name="_Businesses" cascade="all">
<key column="SubCategoryId"/>
<one-to-many
class="HQData.Objects.Business, HQData"/>
</bag>
<bag name="_Buckets" cascade="all">
<key column="SubCategoryId"/>
<one-to-many
class="HQData.Objects.Bucket, HQData"/>
</bag>
</class>
</hibernate-mapping>
전에이 문제를 겪은 사람이 있습니까?
전체 오류 메시지는 다음과 같습니다.
MappingException : 지속 기 없음 : HQData.Objects.SubCategory] NHibernate.Impl.SessionFactoryImpl.GetEntityPersister (String entityName, Boolean throwIfNotFound) c : \ CSharp \ NH2.0.0 \ nhibernate \ src \ NHibernate \ Impl \ SessionFactoryImpl.cs : 766 NHibernate.Impl.SessionFactoryImpl.GetEntityPersister (String entityName)에서 c : \ CSharp \ NH2.0.0 \ nhibernate \ src \ NHibernate \ Impl \ SessionFactoryImpl.cs : 752 NHibernate.Event.Default.DefaultLoadEventListener.OnLoad (LoadEvent 이벤트, LoadType loadType) c : \ CSharp \ NH2.0.0 \ nhibernate \ src \ NHibernate \ Event \ Default \ DefaultLoadEventListener.cs : 37 NHibernate.Impl.SessionImpl.FireLoad (LoadEvent 이벤트, LoadType loadType) c : \ CSharp \ NH2.0.0 \ nhibernate \ src \ NHibernate \ Impl \ SessionImpl.cs : 2054 NHibernate.Impl.SessionImpl.Get (문자열 entityName, 개체 ID) c : \ CSharp \ NH2.0.0 \ nhibernate \ src \ NHibernate \ Impl \ SessionImpl.cs : 1029 NHibernate.Impl.SessionImpl.Get에서 (Type entityClass, Object id) c : \ CSharp \ NH2.0.0 \ nhibernate \ src \ NHibernate \ Impl \ SessionImpl.cs : 1020 NHibernate.Impl.SessionImpl.Get (개체 ID) c : \ CSharp \ NH2.0.0 \ nhibernate \ src \ NHibernate \ Impl \ SessionImpl.cs : 985 HQData.DataAccessUtils.NHibernateObjectHelper.LoadDataObject (Int32 Id) C : \ Development \ HQChannelRepo \ HQ Channel Application \ HQChannel \ HQData \ DataAccessUtils \ NHibernateObjectHelper.cs : 42에서 HQ Website.LocalSearch.get_subCategory () C : \ Development \ HQChannelRepo \ HQ Channel Application \ HQChannel \ HQWebsite \ LocalSearch.aspx.cs : 17 HQWebsite.LocalSearch.Page_Load (Object sender, EventArgs e)에서 C : \ Development \ HQChannelRepo \ HQ Channel Application \ HQChannel \ HQWebsite \ LocalSearch.aspx.cs : 27 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +15 System.Web에서 .Util.CalliEventHandlerDelegateProxy.Callback (Object sender, EventArgs e) +33 System.Web.UI.Control.OnLoad (EventArgs e) +99 System.Web.UI.Control.LoadRecursive () +47 System.Web.UI.Page .ProcessRequestMain (부울 includeStagesBeforeAsyncPoint, 부울 includeStagesAfterAsyncPoint) +1436
Update , 여기 내 시나리오에 대한 해결책 은 다음과 같습니다. 코드를 변경했으며 런타임 중에 구성 파일에 어셈블리를 추가하지 않았습니다.
답변
세션 팩토리 구성에 맵핑 어셈블리를 추가하지 않은 것 같습니다.
app.config를 사용하는 경우 …
.
.
<property name="show_sql">true</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<mapping assembly="Project.DomainModel"/> <!-- Here -->
</session-factory>
.
.
답변
NHibernate를 처음 접하는 사람에게는 분명하지만 매우 유용한 정보입니다.
모든 XML 맵핑 파일은 기본 컨텐츠가 아닌 임베드 된 자원 으로 처리되어야합니다. . 이 옵션은 파일 속성에서 빌드 조치 속성을 편집하여 설정됩니다.
그런 다음 XML 파일이 어셈블리에 임베드되고 NHibernate의 구성 단계 동안 프로젝트 시작시 구문 분석됩니다.
답변
내 문제는 매핑 XML의 이름에 .hbm을 넣는 것을 잊었다는 것입니다. 또한 포함 된 리소스로 만들어야합니다!
답변
나는 이것을 여기서 꺼냈다 .
필자의 경우 매핑 클래스는 공개되지 않았습니다. 다시 말해,
public class UserMap : ClassMap<user> // note the public!
나는 방금했다 :
class UserMap : ClassMap<user>
답변
에 4시간에 대한 지출 인터넷 검색 및 stackoverflowing 주변의 모든 것을 시도해 보았습니다. 내 오류가 발견되었습니다.
내 매핑 파일이 호출되었습니다 을 .hbm.xml 대신 .nbm.xml 했습니다 . 미쳤다.
답변
비슷한 문제가 있었고 다음과 같이 해결했습니다.
MS SQL 2008에서 일했지만 NH 구성에서 NHibernate.Dialect와 같은 나쁜 방언을 사용했습니다. 수정
하면 NHibernate.Dialect입니다. MsSql2008Dialect
그러면 “No persister for ::”David 예외없이 모든 것이 제대로 작동합니다.
답변
초기화 중에 잘못된 어셈블리를 추가하고있었습니다. 내가 유지하는 클래스는 어셈블리 # 1에 있고 내 .hbm.xml 파일은 어셈블리 # 2에 포함되어 있습니다. cfg.AddAssembly(...
어셈블리 # 1 대신 어셈블리 # 2를 추가하도록 변경 했으며 모든 것이 작동했습니다. 감사!