我有一个数据库表,其中包含一个名为 RuntimeInputID 的INT NULL
列(为简洁省略了其他内容:
CREATE TABLE [dbo].[Input](
[InputID] [int] IDENTITY(1,1) NOT NULL,
[RuntimeInputID] [int] NULL,
CONSTRAINT [PK_Input] PRIMARY KEY CLUSTERED
(
[InputID] ASC
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Input] WITH CHECK ADD CONSTRAINT [FK_Input_RuntimeInput] FOREIGN KEY([RuntimeInputID])
REFERENCES [dbo].[Input] ([InputID])
GO
ALTER TABLE [dbo].[Input] CHECK CONSTRAINT [FK_Input_RuntimeInput]
GO
我的模型定义了以下属性,并且还包含一个静态方法,该方法调用存储库来执行工作(为简洁起见,删除了其他属性/方法):
[Table("Input")]
public class Input
{
private static IInput _repo = Factory_Repository.CreateInputRepo();
[Column("RuntimeInputID")]
public int? RuntimeInputID { get; set; }
public static Input[] GetAllInput()
{
try
{
return _repo.GetAll().ToArray();
}
catch (Exception ex)
{
throw ex;
}
}
}
存储库:
public class Repo_Input : IInput
{
public IEnumerable<Input> GetAll()
{
List<SqlParameter> objSqlparam = new List<SqlParameter>
{
new SqlParameter("@LineID",DBNull.Value),
new SqlParameter("@Mode","SELECT_ALL")
};
DataAccessHelper.SetDbNullForNullValues(objSqlparam);
using (var db = new DatabaseContext())
{
// **Exception thrown here**
return db.Database.SqlQuery<Input>("usp_Input_Read @LineID, @Mode", objSqlparam.ToArray()).ToArray();
}
}
}
当我致电GetAll()
时,我在SqlQuery<Input>
行上收到以下异常:
转换为值类型'System.Decimal'失败,因为 具体化值为null。结果类型的通用参数 或者查询必须使用可空类型。
到目前为止,我所做的所有搜索都讨论了确保属性可以为空(我的属性),或者使用空合并运算符(我认为我不需要)。
如何让这段代码生效?