DatabaseContext.Database.SqlQuery <t>错误获取可为空的列

时间:2018-04-13 16:30:20

标签: c# .net sql-server entity-framework

我有一个数据库表,其中包含一个名为 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。结果类型的通用参数   或者查询必须使用可空类型。

到目前为止,我所做的所有搜索都讨论了确保属性可以为空(我的属性),或者使用空合并运算符(我认为我不需要)。

如何让这段代码生效?

0 个答案:

没有答案