Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

我在进行迁移以为表创建默认日期时间值时遇到一些麻烦。我正在使用EF Core Jet提供程序,并且需要使用MS Access-MDB-Files。

我的连接字符串如下:

Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=4;User ID=Admin; Data Source=<my-mdb-file.mdb>

我想将属性的默认日期时间设置为时间“ 15:30”。我尝试了以下操作:

  • entity.Property(e => e.EndTime).HasDefaultValueSql("#01.01.1900 15:30:00#");
  • entity.Property(e => e.EndTime).HasDefaultValueSql("#01.01.1900 15:30#");
  • entity.Property(e => e.EndTime).HasDefaultValueSql("#15:30:00#");
  • entity.Property(e => e.EndTime).HasDefaultValueSql("#15:30#");
  • entity.Property(e => e.EndTime).HasDefaultValueSql("#01/01/1900 03:30:00#");
  • entity.Property(e => e.EndTime).HasDefaultValueSql("#01/01/1900 03:30#");
  • entity.Property(e => e.EndTime).HasDefaultValueSql("#03:30:00#");
  • entity.Property(e => e.EndTime).HasDefaultValueSql("#03:30#");
  • entity.Property(e => e.EndTime).HasDefaultValue(new TimeSpan(15,30,0));
  • entity.Property(e => e.EndTime).HasDefaultValue(new TimeSpan(3,0,0));

并始终收到以下错误消息:

System.Data.OleDb.OleDbException(0x80040E14):CREATE TABLE语句中的语法错误。

然后,我钻研了EntityFrameworkCore.Jet的源代码,并在JetMigrationsSQLGenerator类的以下注释中找到了该代码: // Jet does not support defaults for hh:mm:ss in create table statement

但是在我们的旧代码库中,我们使用ADO-Driver(它是传统的Delphi应用程序)完全做到了这一点。

所以我有以下问题:

  • 我的断言总体上是可能的,我错了吗?
  • EF-Core Jet提供程序中实现的行为是否错误?
  • 最重要的是:如何使它正常工作?

编辑: 为了澄清我的脚步,我总是被删除的文件夹迁移改变模型生成器的配置之后使用的功能Add-Migration <MigrationName>以及Update-Database测试此。

编辑2: 似乎EF核心提供者的评论并不完全错误。#12.30.1899 03:30:00#Access不支持诸如使用TimeSpan创建的组合日期时间。但是,如果直接在Access中输入create语句,而只需使用time(#03:30:00#),它就可以工作。但是我无法让EF Core创建这样的语句。

编辑3: 在使用函数的情况下,HasDefaultValueSql语法错误的原因似乎是EF Jet Provider中的错误。使用此函数时,创建的SQL语句会出现DEFAULT ('#<value>#'),以下问题,即括号不被接受。这似乎是一个已知问题。

编辑4: 关于我的应用程序文化存在一个问题。我对其进行了更改,现在我可以使EF Core成功地生成DateTime,但是由于Jet提供程序的实现,这些值缺少时间值。所以目前的情况如下:如果我使用

  • DateTime我确实可以Update-Database成功拨打电话,但没有时间值,只有日期
  • TimeSpan在Update-Database调用失败(我怀疑访问不喜欢和时间日期)
  • HasDefaultValueSql("#03:30:00#") 我在打电话时也遇到异常 UpdateDatabase

我认为EF Core Jet Provider是这里的问题,但我并不完全相信。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
2.2k views
Welcome To Ask or Share your Answers For Others

Please log in or register to answer this question.

Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...