2012-02-07 7 views
3

シンプルなCLR値型を使用して、SqlDataTypesで大量の太いデータオブジェクトをポコスに変換するマッピング操作を検証するテストを作成しています。SqlDataTypeをnunitのCLR nullable型と比較する

これは私がこれまでに構築されてきた方法です:intにたSqlInt32を比較するとき

private static void CompareValues(string k, Dictionary<string, string> propertyMap, TData sourceDal, TEntity entity) 
    { 
     string sourceField = k; 
     string destField = propertyMap[k]; 
     object sourceval = sourceDal.GetType().GetProperty(sourceField).GetValue(sourceDal, null); 
     object destval = entity.GetType().GetProperty(destField).GetValue(entity, null); 
     Assert.AreEqual(sourceval, 
         destval, 
         String.Format("Values not equal on fields {0} ({1}) to {2} ({3})", 
             sourceDal.GetType().GetProperty(sourceField).Name, sourceDal.GetType().GetProperty(sourceField).PropertyType, 
             entity.GetType().GetProperty(destField).Name, entity.GetType().GetProperty(destField).PropertyType) 
      ); 

    } 

は残念ながら、?、この方法は、試験に失敗しました。 sourcevalの「値」は{74}(通常の余分なSqlDataTypeプロパティを持つ複合型)と表示され、destvalの値は74と表示されます。

私はこのメソッドを型認識にしたくありません。私のマッピングテストでは両方向のデータが渡されるため、片方がSQL型であると仮定しないでください。

私は私が間違っを吠えアムたSqlInt32

public static int CompareTo(this SqlInt32 sqlInt32, int? value) 
    public static int CompareTo(this SqlInt32 sqlInt32, int value) 

をのCompareToを拡張しようとしましたが、拡張メソッドが

(intelisenseは私のテストプロジェクトで適切にそれらを検出しても)と呼ばれていません木?正確な結果が得られるSqlDataTypesとCLR値の型を一般的に比較するにはどうすればよいですか?

答えて

0

非常に粗く、まったく好きではありませんが、値を文字列に変換することが判明しました。

しかし、より良い提案にはまだ開いています。

private static void CompareValues(string k, Dictionary<string, string> propertyMap, TData sourceDal, TEntity entity) 
    { 
     string sourceField = k; 
     string destField = propertyMap[k]; 
     object sourceval = sourceDal.GetType().GetProperty(sourceField).GetValue(sourceDal, null); 
     string sSource = sourceval.ToString(); 
     object destval = entity.GetType().GetProperty(destField).GetValue(entity, null); 
     string sDest = destval.ToString(); 
     Assert.AreEqual(sSource, 
         sDest, 
         String.Format("Values not equal on fields {0} ({1}) to {2} ({3})", 
             sourceDal.GetType().GetProperty(sourceField).Name, sourceDal.GetType().GetProperty(sourceField).PropertyType, 
             entity.GetType().GetProperty(destField).Name, entity.GetType().GetProperty(destField).PropertyType) 
      ); 

    } 
関連する問題