c# – 使用EF Core处理MySQL零日期
背景:
我有200个传统的VB6应用程序,我将转换为C#,使用EntityFramework Core作为我们的ORM.不幸的是,许多应用程序使用 MySQL的零日期(0000-00-00).所以我需要迎合这一点,并能够以某种方式存储零日期.在200个应用程序中更改此功能的基本方式目前不是一个选项. 建立: public DateTime ExpiryDate { get; set; } ... entity.Property(e => e.ExpiryDate) .IsRequired() .HasColumnType("datetime") .HasDefaultValueSql("'0000-00-00 00:00:00'"); 如果在插入上没有发送任何值,这将正确存储零日期. 问题: 至今:
我目前使用的包是: > EFCore 1.1 解决方法
人们可能会争辩说这更适合作为评论,但基本上,这是为了解决这个问题.
和: 你必须帮我一点,因为我手头没有工作系统,所以我从头到尾这样做. (而且我有点匆忙) 首先,从未映射的属性开始: [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公开了一些额外的选项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |