設定によりどちらのモCompositeUserType:どのように指定のSqlのか。
-
21-08-2019 - |
質問
使用NH2.0いカスタムタイプです。では物件
私の実施 ICompositeUserType
.
い指定の長さと精度文字列の小数特性 内のユーザータイプのため、指定ではあらゆる利用シーンにマッピングファイルです。
があり PropertyTypes
物件の実施を返す
IType.面白いのは、 IUserType
は SqlTypes
財産
ICompositeUserType
ではできません。
- い実施の両面?
- 私ためにはユーザタイプを包む各sql型をしたい 指定?
- またはどのように指定すればよいですかSql型複合ユーザー種類?
よろしくおねがいします!
解決 2
私は解決策を見つけ、それは非常に単純です。私はTypeFactory
を使用してNHibernateのタイプを作成する必要があります:
public IType[] PropertyTypes
{
get
{
return new []
{
TypeFactory.GetDecimalType(36, 18),
TypeFactory.GetStringType(100)
}
}
}
他のヒント
私は(NH 2.0)を掘り、このタイプのためのソースコードをダウンロードすることをお勧めします。
まずITYPEインスタンスを構築しますTypeFactory.HeuristicType方法、を見てみます。
...
else if (typeof(ICompositeUserType).IsAssignableFrom(typeClass))
{
type = new CompositeCustomType(typeClass, parameters);
}
else if (typeof(IUserType).IsAssignableFrom(typeClass))
{
type = new CustomType(typeClass, parameters);
}
...
カスタムタイプがICompositeUserTypeを実装している場合、だから、それがCompositeCustomTypeクラスとしてインスタンス化されます。これはICompositeUserTypeとIUserType両方のインターフェイスを実装する可能性を排除する。
今度は、CompositeCustomTypeに見てみましょう。
public override SqlType[] SqlTypes(IMapping mapping)
{
IType[] types = userType.PropertyTypes;
SqlType[] result = new SqlType[GetColumnSpan(mapping)];
int n = 0;
for (int i = 0; i < types.Length; i++)
{
SqlType[] sqlTypes = types[i].SqlTypes(mapping);
for (int k = 0; k < sqlTypes.Length; k++)
{
result[n++] = sqlTypes[k];
}
}
return result;
}
それはあなたのタイプになりますのでPropertyTypesから返され、各プロパティのSQLTYPEを構築します。これは、各プロパティのために、独自のユーザー・タイプのラッパーを提供することはトリックを行うだろうことを意味します。
所属していません StackOverflow