【问题标题】:Entity Framework: map varchar to DateTime property实体框架:将 varchar 映射到 DateTime 属性
【发布时间】:2012-08-17 03:03:20
【问题描述】:

实体框架 4 。 MySQL

我正在尝试将 varchar 列 映射到类的 DateTime 属性

我的班级:

[Table("webnews_in")]
public class WEBNews_in : AbsNews
{
    private DateTime _inDateTimeAdded = DateTime.MinValue;

    public DateTime InDateTimeAdded
    {
        get { return _inDateTimeAdded; }
        set { _inDateTimeAdded = value; }
    }

    private DateTime _inDateTimeUpdated = DateTime.MinValue;

    public DateTime InDateTimeUpdated
    {
        get { return _inDateTimeUpdated; }
        set { _inDateTimeUpdated = value; }
    }
}

CREATE TABLE webnews_in
    (
    Id                INT NOT NULL auto_increment,
    VPN_AC              VARCHAR (20) NULL,
    InDateTimeAdded   VARCHAR (50) NULL,
    InDateTimeUpdated VARCHAR (50) NULL

    PRIMARY KEY (Id)
    );

我收到了这个错误:

    Input string was not in a correct format. 
    Message Input string was not in a correct format. 
    Data IDictionary (0 items) 


StackTrace    at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at MySql.Data.Types.MySqlDateTime.ParseMySql(String s)
   at MySql.Data.MySqlClient.MySqlDataReader.GetDateTime(Int32 i)
   at MySql.Data.Entity.EFMySqlDataReader.GetDateTime(Int32 ordinal) 
HelpLink null  
Source mscorlib 

【问题讨论】:

  • 你能解释一下为什么你需要一个varchar 用于date 字段吗?而不是datetime
  • @JamesKhoury 你知道,这是历史遗留的问题。一切都是 varchar 或整数
  • 如果数据有效,我个人会尝试更改数据库。将来可能会减轻您的头痛。

标签: c# .net mysql entity-framework orm


【解决方案1】:

每次在模型中设置与表不同的类型时,EF都会抛出错误,即如果在模型中将字段设置为整数,但该字段在表中具有字符串类型,则在加载数据它会给你一个错误。为避免这种情况,您必须采取一种解决方法,声明一个具有等效表类型的公共属性并将其转换为模型所需的类型,请尝试以下操作:

[Table("webnews_in")]
public class WEBNews_in : AbsNews {

   private DateTime _inDateTimeAdded = DateTime.MinValue;

   public string InDateTimeAdded {
       get {
           return Format(_inDateTimeAdded, " dd/MM/yyyy hh:mm:ss tt");
       }
       set {
           _inDateTimeAdded = DateTime.Parse(value);
       }
   }

   private DateTime _inDateTimeUpdated = DateTime.MinValue;

   public string InDateTimeUpdated {
       get {
           return Format(_inDateTimeUpdated, " dd/MM/yyyy hh:mm:ss tt");
       }
       set {
           _inDateTimeUpdated = DateTime.Parse(value);
       }
   }
}

【讨论】:

  • 但是属性 'InDateTimeAdded' 仍然是字符串,我仍然不能使用 DateTime 类型的属性??
猜你喜欢
  • 2012-03-12
  • 2015-01-22
  • 2017-09-20
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 2013-10-14
  • 1970-01-01
相关资源
最近更新 更多