私のSQLデータベースには、次のビューがあります。
CREATE VIEW MyView AS
(SELECT ChangeType FROM MyTable) UNION ALL
(SELECT NULL AS ChangeType FROM MyTable)
ChangeType
タイプはどこにありますかTINYINT
。次に、C#コードに次のクラスがあります。
[Table(Name = "MyView")]
public class MyView
{
[Column]
public Nullable<int> ChangeType;
}
これは次のように使用されます。
var table = dataContext.GetTable<MyView>();
var elements = table.ToArray();
このコードを実行すると、次の例外が発生します。
[InvalidCastException: Specified cast is not valid.]
System.Data.SqlClient.SqlBuffer.get_Int32() +6393860
Read_MyView(ObjectMaterializer`1 ) +3404
System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +42
System.Linq.Buffer`1..ctor(IEnumerable`1 source) +488
System.Linq.Enumerable.ToArray(IEnumerable`1 source) +104
MyCodeHere
次のようにの2番目の部分を変更した場合UNION
:
(SELECT CONVERT(INT,NULL) AS ChangeType FROM MyTable)
同じコードが問題なく実行されます。
なぜその「キャストは無効」なのですか?なぜTINYINT
代わりにただ読まれないのint
ですか?