c# - 无法将 DateTime 从 EF "Code First"保存到 MySQL 远程数据库

标签 c# mysql wpf entity-framework

简介

我有一个像这样的 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 操作的所有操作,只有一些让我抓狂的细节。

首先这是绑定(bind)到表的实体。

[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;
    }
}

不必担心抽象类Entity,因为它只有 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

该问题与 [DatabaseGenerate(DataBaseGenerateOption.Compulated)] 有关,如果您打算自己处理日期,则应将其删除...

关于c# - 无法将 DateTime 从 EF "Code First"保存到 MySQL 远程数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35718377/

相关文章:

mysql - 尝试更改表约束时出现错误代码 1452

.net - 是否有任何开源的WPF仪表控件?

c# - 在不实例化的情况下从另一个类访问非静态方法

c# - Winforms 设计器 : Modify (and keep) properties in sub objects

c# - 签署 WP7 项目的强名?

mysql - rails : specifying production environment specific migrations

mysql - 我可以将snort日志输出到数据库吗?

c# - 动态用户控件更改 - WPF

c# - 有一个同步处理程序和一个异步处理程序

c# - 使用 LINQ 仅从表中获取所需的列以修改和保存记录会出现典型错误