Nhibernate에서 2 차 캐시를 구현하는 데 문제가 있습니다. 나는 다음과 같은 클래스가 매핑이 있습니다2 차 레벨 캐시가있는 NHibernate가 Rehydrating 속성이 아닙니다. inserted = "false"update = "false"?
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Data" namespace="Data">
<class name="Account" table="Accounts" lazy="false">
<cache region="Standard" usage="read-write" include="all"/>
<id column="ID" name="ID">
<generator class="assigned" />
</id>
<version name="VersionStamp" column="VersionStamp" type="integer" unsaved-value="0" />
<property name="Name" not-null="true" />
<property name="Type" not-null="true" />
<property name="ClientID" not-null="true" insert="false" update="false" />
<property name="DateCreated" not-null="true" type="UtcDateTime" />
<property name="LastUpdatedDate" not-null="true" type="UtcDateTime" />
<property name="IsActive" not-null="true" />
<many-to-one name="Client" class="Client" column="ClientID" not-found="exception" not-null="true" />
</class>
</hibernate-mapping>
속성 "된 ClientID"는 클라이언트 테이블에 외래 키와 속성이 연결된 클라이언트 객체를 검색하는 데 사용 대일 클라이언트입니다.
새 계정을 추가 할 때 Session.Get을 사용하여 데이터베이스에서 Client 개체를 찾아 내 계정 개체의 Client 속성에 할당합니다. 또한 개체가 데이터베이스에 기록되고 ID가 데이터베이스에 올바르게 저장되면 ClientID 속성이 자동으로 채워집니다. Session.Get을 사용하여 ID로 데이터베이스에서 Account 개체를 검색하면 개체를 검색 할 때 모든 필드가 올바르게 채워집니다.
그러나 위에 표시된 설정을 사용하여 두 번째 수준의 캐시를 구현할 때 Account.Object를 사용하여 Account 개체를 검색 할 때 ClientID 속성이 채워지지 않지만 Client 속성은 올바르게 채워집니다. 이것이 2 차 레벨 캐시에서 작동하지 않는 몇 가지 이유가 있습니까? 아니면 내 매핑/구성에 잘못된 일을 했습니까?
현재 저는 캐싱 공급자로 SysCache만을 사용하고 있으며 쿼리와 두 번째 수준의 캐시가 모두 설정되어 있습니다. Client 클래스 매핑에는 Accounts에 상응하는 일대 다 속성이 포함됩니다.
Client 속성을 사용하지 않고 읽을 수 있도록 내 Account 클래스의 ClientID 속성을 편리하게 사용하기 때문에 캐싱없이 제대로 작동하는 것 같습니다.
도움 주셔서 감사합니다.
리치
감사합니다, Radim입니다. 이것은 문제를 해결 한 것으로 보입니다. 나는 필드 이름을 둘러싼 []가 수식에 필요하다고 가정합니다. []를 모든 데이터베이스에 사용할 수 있습니까, 아니면 백엔드 데이터베이스를 변경하면 다른 수식을 지정해야합니까? –
예, 다른 매핑이 필요합니다! ;) MS SQL Server에 연결할 때 사용하고 있습니다. 그러나 다른 DB 엔진에 손상을 줄 수 있는지 확실하지 않습니다. 그게 도움이 됐어! ;) –