c# – 使用EF Core处理MySQL零日期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用EF Core处理MySQL零日期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1871字,纯文字阅读大概需要3分钟。
内容图文
背景:
我有200个传统的VB6应用程序,我将转换为C#,使用EntityFramework Core作为我们的ORM.不幸的是,许多应用程序使用MySQL的零日期(0000-00-00).所以我需要迎合这一点,并能够以某种方式存储零日期.在200个应用程序中更改此功能的基本方式目前不是一个选项.
建立:
我可以定义一个实体属性,它表示MySQL中的字段定义
例如:
public DateTime ExpiryDate { get; set; }
...
entity.Property(e => e.ExpiryDate)
.IsRequired()
.HasColumnType("datetime")
.HasDefaultValueSql("'0000-00-00 00:00:00'");
如果在插入上没有发送任何值,这将正确存储零日期.
问题:
由于C#的最小日期为0001-01-01,因此我无法明确存储零日期.所以我的问题是……有没有办法设置我的实体来进入和退出数据库?
至今:
我尝试使用一个支持字段,定义为字符串,以便我可以操纵任何DateTime.MinValue成为’0000-00-00′.这允许我存储零日期,但在尝试检索数据时会导致转换问题(正如您所料):
System.InvalidCastException : Unable to cast object of type
‘System.DateTime’ to type ‘System.String’.
我目前使用的包是:
> EFCore 1.1
> PomeloEntityFrameWorkCore 1.1.2
> MySQL 5.7.18
解决方法:
人们可能会争辩说这更适合作为评论,但基本上,这是为了解决这个问题.
和:
你必须帮我一点,因为我手头没有工作系统,所以我从头到尾这样做. (而且我有点匆忙)
首先,从未映射的属性开始:
[NotMapped]
public DateTime ExpiryDate { get; set; }
此属性未映射.它可能导致有关数据库的一些错误与模型不匹配,但我们可以克服这一点.查询数据时,不会自动填充此属性.所以,我们需要一种方法来处理这个问题.
例如,(这是一个不好的例子,因为我们需要实体中的某个上下文):
[NotMapped]
public DateTime? ExpiryDate
{
get
{
//of course you'll need some caching here
var s = context.Database.SqlQuery<string>("query to select datetime as string");
//additional logic to determine validity:
if (s == "0000-00-00")
return null;
//else:
//do the conversion
}
}
这里的基本问题;你想在EF框架内支持多远?您是否只需要使用EF等的更改跟踪器来阅读或写入?
还有其他可能性,例如,在SQL本身内执行CAST到nvarchar以获取数据并进一步处理它.
也许ModelBuilder公开了一些额外的选项.
内容总结
以上是互联网集市为您收集整理的c# – 使用EF Core处理MySQL零日期全部内容,希望文章能够帮你解决c# – 使用EF Core处理MySQL零日期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。