为什么在我的WPF应用程序中,DateTime字段始终写为ZERO?

时间:2017-09-20 10:06:59

标签: mysql wpf entity-framework-6

我正在编写一个程序,将智能手机中的短信存储在数据库中。

我在MySQL数据库中创建了一个表,如下所示:

  

CREATE TABLE sms
smsID int(11)NOT NULL AUTO_INCREMENT,messageDate datetime NOT NULL,
text varchar(1000)DEFAULT NULL,
number varchar(45)DEFAULT NULL,
senderID int(11)DEFAULT' 0',
taskID int(11)DEFAULT' 0',messageType int(11)DEFAULT' 0',{{1} } bit(1)NOT NULL默认b' 0',
主要键(hasReply),
smsIDdate
)ENGINE = InnoDB AUTO_INCREMENT = 54 DEFAULT CHARSET = utf8;

我使用以下代码在C#中创建和存储传入文本消息的新对象:

messageDate

所有数据都正确存储,但DbContext db = new DbContext(); var message = new sms(); message.taskID = taskID; message.senderID = senderID; message.messageDate = this.MessageDate; message.number = this.Number; message.text = this.Text; message.messageType = MessageTypes.TYPE_INBOUND; DebugLog.Log("Storing message with datetime: " + message.messageDate?.ToLongTimeString()); db.sms.Add(message); db.SaveChangesAsync(); 字段(我已仔细检查过:在调用messageDate时不是null)除外。它始终存储为&00; 00-00-0000 00:00'或者如果在DB表中设置了默认日期,则设置默认日期。

当我们查看来自EF-log的生成的查询时,这是有意义的:

  

使用datetime存储消息:11:37:29
在20.09.2017 11:37:28 +02:00开启连接在20.09.2017 11:37:28 +02开始交易: 00

SET SESSION sql_mode =' ANSI&#39 ;; INSERT INTO SaveChangesAsync
smstext
numbersenderID
taskID
messageType)VALUES(
@ gp1,< br /> @ gp2,
1227,
122138,
1,
0);
选择
hasReply
smsID
FROM messageDate
WHERE row_count()&gt; 0和sms = last_insert_id()

- @ gp1:&#39;某些文字&#39; (Type = String,IsNullable = false,Size = 5)
- @ gp2:&#39; HIDDEN NUMBER&#39; (Type = String,IsNullable = false,Size = 14)
- 执行时间为20.09.2017 11:37:28 +02:00
- 在1 ms内完成,结果为:EFMySqlDataReader

承诺交易于20.09.2017 11:37:28 +02:00在2016年6月20日上午11:37:28 + 02:00封闭连接。交易于20.09.2017 11 :37:28 +02:00

似乎在插入后从数据库中查询了相关字段,就像AUTO_INCREMENT smsID一样。不知道为什么。

这真让我感到烦恼,因为我不想插入当前时间,但是消息到达的实际时间,我似乎无法找到解决方案。

任何提示都会很棒!提前致谢。 :)

2 个答案:

答案 0 :(得分:0)

Fluent API或Data Annotations中定义的messageDate属性是什么? Type是否设置为datetime?它未设置为在此日期时间字段中使用自动增量键,对吗?

我会检查messageDate是否是您密钥的一部分。我还要检查[DatabaseGenerated(DatabaseGeneratedOption.Identity)]属性是否通过Data Annotations或Fluent API应用于messageDate属性。

答案 1 :(得分:0)

感谢Daniel Lorenz的评论。

他提到日期时间字段我是密钥的一部分。 好吧,我在数据库中为它创建了一个索引,然后在Visual Studio(数据库优先)中生成模型。

解决此问题(不是一种解决方案):

  1. 我从表中删除了索引(MySQL)
  2. 从模型中删除了表格(VS C#)
  3. 将表重新添加到模型(VS C#)
  4. 重新添加表的索引(MySQL)
  5. 突然正确生成查询,并正确存储日期。

    这对我来说感觉像个错误,但我很高兴它现在有效;)