【发布时间】:2012-10-08 11:43:29
【问题描述】:
在我的 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
如果我将UNION 的第二部分更改如下:
(SELECT CONVERT(INT,NULL) AS ChangeType FROM MyTable)
同样的代码运行良好。
为什么那里的“演员表无效”?为什么TINYINT 不能代替int 被读取?
【问题讨论】:
-
见这篇文章:stackoverflow.com/questions/425389/…> TinyInt 映射到 CLR 中的 Byte
-
看这篇文章:stackoverflow.com/questions/425389/…> TinyInt 映射到 CLR 中的 Byte
标签: c# .net sql-server linq-to-sql