gpt4 book ai didi

mysql - 为什么在使用 EF6 的 WPF 应用程序中,日期时间字段始终写为零?

转载 作者:行者123 更新时间:2023-11-29 18:24:14 25 4
gpt4 key购买 nike

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

我在 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',
hasReply bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (smsID),
KEY date (messageDate)
) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8;

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

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 字段(我仔细检查过:在调用 SaveChangesAsync 时不是 null >)。它始终存储为“00-00-0000 00:00”或默认日期设置(如果在数据库表中设置)。

当我们查看 EF 日志生成的查询时,这是有意义的:

Storing message with datetime: 11:37:29
Opened connection at 20.09.2017 11:37:28 +02:00
Started transaction at 20.09.2017 11:37:28 +02:00

SET SESSION sql_mode='ANSI';INSERT INTO sms(
text,
number,
senderID,
taskID,
messageType,
hasReply) VALUES (
@gp1,
@gp2,
1227,
122138,
1,
0);
SELECT
smsID,
messageDate
FROM sms
WHERE row_count() > 0 AND smsID=last_insert_id()

-- @gp1: 'some text' (Type = String, IsNullable = false, Size = 5)
-- @gp2: 'HIDDEN NUMBER' (Type = String, IsNullable = false, Size = 14)
-- Executing at 20.09.2017 11:37:28 +02:00
-- Completed in 1 ms with result: EFMySqlDataReader

Committed transaction at 20.09.2017 11:37:28 +02:00
Closed connection at 20.09.2017 11:37:28 +02:00
Disposed transaction at 20.09.2017 11:37:28 +02:00

看起来相关字段是在插入后从数据库中查询的,就像 AUTO_INCRMENT smsID 一样。不知道为什么。

这真的很困扰我,因为我不想插入当前时间,而是插入消息到达的实际时间,而且我似乎找不到解决方案。

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

最佳答案

Fluent API 或数据注释中定义的 messageDate 属性是什么?类型是否设置为日期时间?它没有设置为在此日期时间字段上使用自动增量键,对吧?

我会检查 messageDate 是否是您 key 的一部分。我还会检查 [DatabaseGenerate(DatabaseGenerateOption.Identity)] 属性是否通过数据注释或 Fluent API 应用于 messageDate 属性。

关于mysql - 为什么在使用 EF6 的 WPF 应用程序中,日期时间字段始终写为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com