質問

使用NH2.0いカスタムタイプです。では物件 私の実施 ICompositeUserType.

い指定の長さと精度文字列の小数特性 内のユーザータイプのため、指定ではあらゆる利用シーンにマッピングファイルです。

があり PropertyTypes 物件の実施を返す IType.面白いのは、 IUserTypeSqlTypes 財産 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を構築します。これは、各プロパティのために、独自のユーザー・タイプのラッパーを提供することはトリックを行うだろうことを意味します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top