C# 无法在“收件人”字段(日期时间)中插入空值
我正在努力解决这个问题,尽管有很多关于它的线索 我有一个类,它有一个可为空的C# 无法在“收件人”字段(日期时间)中插入空值,c#,sql-server,entity-framework,datetime,C#,Sql Server,Entity Framework,Datetime,我正在努力解决这个问题,尽管有很多关于它的线索 我有一个类,它有一个可为空的DateTime?字段,如下所示: public class ActiveItem { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public Nullable<DateTime> TimeStarted { get; set;
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; }
}
然后我尝试保存一个ActiveItem
,其中TimeStarted
和lasthread
为空。但是,当我尝试这样做时,会出现以下错误:
无法将值NULL插入表“dbo.ActiveItems”的“TimeStarted”列;该列不允许NULL。insert失败。\r\n语句已终止
我好像绕不开这件事
奇怪的是,我可以登录到SQL server并在表中创建一个空值行。这个实体框架出错了吗?以确保使用探查器访问正确的数据库 如果约束冲突与您所期望的(在模式方面)不一致,则很可能是您正在访问另一个数据库
然后,将用于连接实体框架的连接字符串更新到正确的数据库。映射保存在哪里和/或如何更新?我不知道有什么地图被保留了下来。谷歌…是的,我指的是EDMX文件=/我的系统表中似乎没有EDMX文件或
\u MigrationHistory
表。您是否尝试对数据库进行跟踪,以查看实际执行的SQL是什么,并验证它是否命中正确的数据库?可能是命中错误的数据库,等等。但为了将来的参考,请记住,如果使用ADO.net保存使用SqlParameter[插入/更新]值,您需要将“NULL”保存到DB-您需要设置为SqlParameter.value=DbNull.value
。如果将值设置为c\NULL
,SqlParameter将失败。有趣的是,Oracle ODP.NetOracleParameter
可以同时执行-NULL
和DbNull.value
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)
);