【问题标题】:The cast to value type 'DateTime' failed because the materialized value is null转换为值类型“DateTime”失败,因为具体化值为 null
【发布时间】:2013-01-05 22:42:03
【问题描述】:

我的项目是抛出上述错误,因为我表中的发货日期为空。我使用的是 Code First,并且 DateTime 字段在泛型集和 SQL 表中都被声明为可为空。我正在使用结果集填充网格视图。理想情况下,当 ShipDate 字段为空时,我希望 gridview 显示“尚未发货”,但此时,我很高兴能够显示记录。任何帮助是极大的赞赏。这是我正在使用的代码隐藏和上下文类:

public class Order
    {
        [Key]
        public int OrderID { get; set; }
        public int CustomerID { get; set; }
        public string ShipAddress { get; set; }
        public string ShipCity { get; set; }
        public string ShipState { get; set; }
        public string ShipZip { get; set; }
        [ScaffoldColumn(false)]
        public string PaymentTransactionID { get; set; }
        [ScaffoldColumn(false)]
        public System.DateTime OrderDate { get; set; }
        public System.DateTime? ShipDate { get; set; }
        public virtual Customers Customers { get; set; }

        public List<OrderDetail> OrderDetails { get; set; }


    }

后面的代码是:

    public List<OrderDetail> FetchByOrderID()
    {
        int myOrderID = CusOrderId;
        ProductContext db = new ProductContext();


        return db.OrderDetails.Where(
            c => c.OrderID == myOrderID).ToList();
    }

【问题讨论】:

    标签: visual-studio-2012 code-first asp.net-4.5


    【解决方案1】:

    我在尝试通过 LINQ 获取 max(date_column) 时遇到上述错误。该列被定义为 NOT NULL,当查询中没有返回行时,它会尝试将 null 分配给表示日期列的 DateTime 属性。一种解决方案是将日期列更改为 NULLable,这会将实体属性创建为 DateTime 类型?

    【讨论】:

      【解决方案2】:

      我使用 VB.Net,但遇到了类似的问题。我不知道你是否解决了你的问题。 但是我将变量声明为Nullable(Of Date),这对我有用。有人告诉我添加“?”做类似的事情,但不幸的是没有为我工作,或者我没有正确地做。 :o)

      private DateTime? _settlementDate {get;set;}
      

      【讨论】:

        【解决方案3】:

        我遇到了类似的问题,同样的错误。

        原来我未能在配置中设置我的 ConnectionString。

        【讨论】:

          猜你喜欢
          • 2013-02-24
          • 2013-06-18
          • 2015-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多