小编Ban*_*ito的帖子

使用 EF Core 处理 MySQL 零日期

背景: 我有 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'");
Run Code Online (Sandbox Code Playgroud)

如果插入时没有发送值,这将正确存储零日期。

问题: 因为 C# 有一个最小日期,所以0001-01-01 我不可能显式存储零日期。所以我的问题是...有没有办法设置我的实体以将这个零日期放入和取出数据库?

到目前为止: 我已经尝试使用支持字段,定义为字符串,以便我可以操纵任何DateTime.MinValue成为'0000-00-00'. 这允许我存储零日期,但在尝试检索数据时会导致转换问题(如您所料):

System.InvalidCastException:无法将“System.DateTime”类型的对象转换为“System.String”类型。

我当前使用的软件包是:

  • EFCore 1.1
  • PomeloEntityFrameWorkCore 1.1.2
  • MySQL 5.7.18

c# mysql entity-framework entity-framework-core

5
推荐指数
1
解决办法
1793
查看次数

Entity Framework Core 1.1.0数据类型转换

我有一个遗留数据库,用于存储用户注释(以及其他一些文本字段)作为blob数据类型,我无法更改.

我正在编写一个数据访问层,需要始终将数据转换string为从数据库中检索数据,并blob在保存时将其转换回.

EF脚手架工具生成属性作为byte[]这些实体的数据类型.

public byte[] Comment { get; set; }
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我只是将实体属性类型更改为string它实际上确实正确地保存了数据,但加载数据会导致转换错误:

无法将类型为'System.Byte []'的对象强制转换为'System.String'.

(有趣的是,版本1.0.0没有抛出此错误,加载和保存工作正常.)

我的问题是......有没有一种方法可以配置EF核心,以便在我从数据库中检索数据并将其恢复到blob保存状态时自动将此数据转换为字符串?或者我是否需要编写一大堆私有getter和setter来进行这种操作?

c# entity-framework-core

0
推荐指数
1
解决办法
964
查看次数