2012-02-22 2 views
1

NHibernate의 schemaexport 함수로 Oracle DB를 생성하는 데 문제가 있습니다. byte []로 정의 된 속성의 경우 RAW 유형의 DB 필드를 만듭니다 (btw는 2000 바이트로 제한됨). 이 필드 유형은 내 필요에 충분하지 않으며 NH 대신 BLOB 필드를 만들 필요가 있습니다. 어떻게해야합니까? 매핑 파일 (나는 hbm 파일을 사용하여 xml 매핑을 사용)에서 필드를 선언하려했으나 type = "Binary"및 type = "BinaryBlob"중 하나를 지정했지만 그 중 아무 것도 원하는 효과가없는 것 같습니다. 생성 된 필드는 항상 RAW. 누구도 나를 도와 줄 수 있습니까?Oracle Blob 필드에 대한 NHibernate 스키마 내보내기 문제

답변

1
<property name="prop"> 
    <column name="blobcolumn" sql-type="BinaryBlob"> 
</property> 

업데이트 : 나는 비슷한 문제를 가지고 있었고,이 솔루션은 길이 속성 어쩌면이 또한 트릭

<property name="prop" type="Binary" length="1000000"/> 
+0

당신은 SQL 형식의 가능한 값을 어디에서 찾을 수 있습니까? 'type = "BinaryBlob"'과의 차이점은 무엇입니까? – themarcuz

+0

'sql-type'은 데이터베이스에 존재하는 데이터베이스 유형을 지정합니다. 사전 정의 된 값이 있는지 또는 sqlcreatescript에서만 문자열로 전송되는지는 알 수 없습니다. – Firo

1

을 할 수있는 :

<property name="Attachment" length="5224880"/> 

것은 당신이 다음 어떤 길이를 지정하지 않으면 어떤 당신은 그것의 최대가 2000 바이트이기 때문에 oracle에서 RAW (2000)로 끝날 것 같은 type 속성을 씁니다. 그러나 여러분이 5 MB 또는 바이트 5224880 바이트를 필요로한다면 nhibernate 스위치는 BLOB automaticall Y는 2000 바이트

그래서 닷 넷 속성이

public virtual byte[] Attachment { get; set; } 

적절한 매핑이

<property name="Attachment" length="5224880"/> 

될 것이라고 아니면 코드베이스에서 OracleLiteDialect.cs을 탐색 할 수 있습니다 부여 (소스 코드를 다음 더 큰 있기 때문에) Nhibernate

0

만약 누군가가 컨벤션 방식으로 byte [] 타입을 BLOB로 변환하고자한다면 나는 이것을

public class ByteArrayToDbBlobConvention : IPropertyConvention, IPropertyConventionAcceptance 
{ 
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) 
    { 
     criteria.Expect(x => x.Type == typeof(byte[]));    
    } 

    public void Apply(IPropertyInstance instance) 
    { 
     instance.CustomSqlType("BLOB"); 
    } 
}