string
또는 AnsiString
과 같이 매핑 할 수 있습니다.
<property name="MyBigUnicodeColumn" type="string" length="1000000"/>
<property name="MyBigAnsiColumn" type="AnsiString" length="1000000" />
길이가 각각 4000 또는 8000 그때마다 큰
는 NH는 NVARCHAR (최대) 또는 VARCHAR (max)를 생성한다.
길이가 SQL 매개 변수에 사용되고 길이가 지정된 길이로 잘릴 수 있습니다 (사용중인 NH 버전에 따라 일부 변경이있을 수 있음). 그래서 충분히 크게 지정하십시오.
편집는 : 불행하게도, 그것은 일반 문자열과 동일 AnsiString을 작동하지 않습니다. NH 코드를 읽고 다음을 찾았습니다.
varchar (max)는 SQL Server 2005의 dialect에서 지원됩니다.
MsSql2000Dialect.cs 라인 205
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForLengthLimitedAnsiString, "VARCHAR($l)");
MsSql2005Dialect.cs 라인 19 : SQL 형 등
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForAnsiClob, "VARCHAR(MAX)");
그것은 VARCHAR (최대) 레지스터는 다음의 AnsiString 큰 매핑되면 선택할 SqlClientDriver.cs에서 8000
당신이 아니라 ANSI 문자열 (라인 135)에 대한, 그것은 문자열에 대한 PARAMS에서 "모양"을 구현하는 것을 볼 수 있습니다
case DbType.AnsiString:
case DbType.AnsiStringFixedLength:
dbParam.Size = MaxSizeForLengthLimitedAnsiString;
break;
// later on
case DbType.String:
case DbType.StringFixedLength:
dbParam.Size = IsText(dbParam, sqlType) ? MaxSizeForClob : MaxSizeForLengthLimitedString;
break;
항상 AnsiString 유형의 매개 변수 한계로 8000을 넣습니다.
드라이버와 방언 사이의 불일치 때문에 버그라고 부를 것입니다.
버그는 모든 AnsiString에서 발생하기 때문에 NH에서 올바른 SQL 유형을 선택할 수있는 매핑에서 sql 유형을 지정하는 데 도움이되지 않습니다.https://nhibernate.jira.com/browse/NH-3252가 NHibernate에 (nhusers) 포럼에
AnsiString과는 정의에 의해 비 유니 코드 문자열이기 때문에이 파괴되어서는 안된다. 미래의 SQL Server가 문자열이나 ansi 문자열을 지정된 길이로 저장하는 새로운 방법을 제공 할 경우에만 변경 될 것이라고 생각합니다. –
다른 측면에서, 이것은 Dialect에서 모두 구현되며, 방언을 직접 작성하는 것은 매우 쉽습니다. –
이것은 사용중인 NH 버전에 따라 다릅니다. SQL Server에서 쿼리를 다시 사용하도록 매개 변수를 전달할 때 길이를 지정합니다. SQL Server 클라이언트는 데이터를 차단하는 데 사용되어 매우 나빴습니다. 그래서 길이를 확인하십시오. 구멍을 2GB 최대 길이로 사용하려면 다음과 같이 지정하십시오. –