【发布时间】:2015-08-15 13:30:24
【问题描述】:
我正在努力解决这个问题,尽管在 SO 上有很多关于它的线程。
我有一个类有一个可以为空的DateTime? 字段,如下所示:
public class ActiveItem
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public Nullable<DateTime> TimeStarted { get; set; }
public Nullable<DateTime> LastHeard { get; set; }
}
我有一个数据库架构定义为:
CREATE TABLE [dbo].[ActiveItems] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[TimeStarted] DATETIME NULL,
[LastHeard] DATETIME NULL,
CONSTRAINT [PK_ActiveWorkflows] PRIMARY KEY CLUSTERED ([ID] ASC)
);
然后我尝试保存ActiveItem,其中TimeStarted 和LastHeard 为空。但是,当我尝试这样做时,出现以下错误:
“无法将值 NULL 插入 'TimeStarted' 列,表 'dbo.ActiveItems';列不允许空值。INSERT 失败。\r\n语句已终止。”
我似乎无法解决这个问题。
奇怪的是,我可以登录到 SQL 服务器并在表中创建一个包含空值的行。这个实体框架是不是搞砸了?
【问题讨论】:
-
映射保存在哪里和/或如何更新它?我没有意识到保留了某种映射。谷歌搜索.....
-
是的,我的意思是一个 EDMX 文件; =/
-
我的系统表中似乎没有 EDMX 文件或
__MigrationHistory表 -
您是否尝试过对数据库进行跟踪以查看正在执行的实际 SQL 是什么,并验证它是否访问了正确的数据库?
-
可能是你打错了数据库等。但为了以后的参考,请记住,如果你使用 ADO.net 使用 SqlParameter 保存 [insert/update] 值,你需要将“NULL”保存到 DB - 您需要设置为
SqlParameter .Value = DbNull.Value。如果您将值设置为c# null,SqlParameter 将失败。有趣的是,Oracle ODP.NetOracleParameter可以同时做到 -null和DbNull.Value
标签: c# sql-server entity-framework datetime