无法将日期时间从 EF“代码优先”保存到 MySQL 远程数据库
本文关键字:保存 代码优先 MySQL 数据库 日期 时间 代码 EF | 更新日期: 2023-09-27 18:36:47
简介
我有一个这样的 MySQL 表:
id - primary key
name - string
surname - string
created_at - DateTime default 0000-00-00 00:00:00
updated_at - Datetime default 0000-00-00 00:00:00
这是我访问的远程表。我正在使用 EF 6 创建本地 WPF 桌面应用程序。该应用程序运行良好,它可以完成从连接到基本 CRUD 操作的所有操作,只有一点点细节让我发疯。
首先是绑定到表的实体。
[Table("users")]
public class User : Entity
{
#region Table Columns
private int _id;
private string _name;
private string _surname;
private DateTime _createdAt;
private DateTime _updatedAt;
#endregion
[Column("id")]
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId
{
get { return this._id; }
set
{
this._id = value;
OnPropertyChanged();
}
}
[Column("name")]
[Required]
public string Name
{
get { return this._name; }
set
{
this._name= value;
OnPropertyChanged();
}
}
[Column("surname")]
[Required]
public string Surname
{
get { return this._surname; }
set
{
this._surname= value;
OnPropertyChanged();
}
}
[Column("created_at")]
[DatabaseGenerated(DataBaseGeneratedOption.Computed)]
public DateTime CreatedAt
{
get { return this._createdAt; }
set
{
this._createdAt = value;
OnPropertyChanged();
}
}
[Column("updated_at")]
public DateTime UpdatedAt
{
get { return this._updatedAt; }
set
{
this._updatedAt = value;
OnPropertyChanged();
}
}
public User()
{
this.CreatedAt = DateTime.Now;
this.UpdatedAt = DateTime.Now;
}
}
不要担心抽象类实体,因为它只有 INotifyPropertyChanged 实现。
DBContext非常简单,它有实体的DBSet,仅此而已。
问题
好吧,问题很简单,日期没有保存。例如,当我创建一个新用户并保存它时,即使我有明确将日期设置为有效日期时间的构造函数,日期也将是默认日期。
例如,此处的代码:
User user = new User(); // Create a new User
user.Name = "Foo";
user.Surname = "Bar";
App.RemoteContext.Users.Add(user);
App.RemoteContext.Entry(user).State = System.Data.Entity.EntityState.Added;
App.RemoteContext.SaveChanges();
它将在远程数据库上创建一个用户,其中包含除 created_at 和 updated_at 之外的所有正确数据,这些数据将设置为 0000-00-00 00:00:00(默认值)
我该如何解决这个问题?
注意:我不能更改远程数据库类型或默认值。
FML
问题与[DatabaseGenerated(DataBaseGeneratedOption.Computed)]
有关,如果您打算自己处理日期,则应将其删除......