约会时间?到日期时间
DateTime? to DateTime
我卡住了。我正在创建一个作者数据库,运行 出了问题。我需要将值 Umrti(死亡日期)作为空值保存到数据库,但它始终将该值保存为 01.01.0001。我尝试了一些东西,现在我的代码如下所示:
public class AutorDetailModel
{
public int Id { get; set; }
[Required]
public string Jmeno { get; set; }
[Required]
public string Prijmeni { get; set; }
public string ProstredniJmeno { get; set; }
[DotvvmEnforceClientFormat]
public DateTime Narozeni { get; set; }
[DotvvmEnforceClientFormat]
public DateTime? Umrti { get; set; }
public string Bio { get; set; }
public string Narodnost { get; set; }
public byte Obrazek { get; set; }
}
在这样的服务中:
public async Task UpdateAutorAsync(AutorDetailModel autor)
{
using (var dbContext = CreateDbContext())
{
var entity = await dbContext.Autors.FirstOrDefaultAsync(s => s.Id == autor.Id);
entity.Jmeno = autor.Jmeno;
entity.Prijmeni = autor.Prijmeni;
entity.ProstredniJmeno = autor.ProstredniJmeno;
entity.Narozeni = autor.Narozeni;
entity.Umrti = autor.Umrti;
entity.Bio = autor.Bio;
entity.Narodnost = autor.Narodnost;
entity.Obrazek = autor.Obrazek;
await dbContext.SaveChangesAsync();
}
}
但是,autor.Umrti 仍然给我这个错误:
Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)
我真的被困住了,将不胜感激任何建议。谢谢
抱歉我的英语不好:)
如果您正在使用 SQL 服务器(也可能是其他数据库引擎),那么您不能在 DateTime 字段中保存 NULL 值。
您必须将 NULL 转换为日期,任何日期,才能将其保存在数据库中。通常 SQL 服务器使用“1900-01-01”来表示 NULL 日期。在大多数情况下这很好,因为除非您使用的是 18 世纪末左右的历史数据,否则它不会与您的有效数据发生冲突。从数据库中读取时,您可以在代码中将所有值为“1900-01-01”的日期转换为 null,而在写入数据库时,如果代码中的值为 null,则将其转换为“1900-01-01” .
您必须检查 Umrti 是否为空
public async Task UpdateAutorAsync(AutorDetailModel autor)
{
using (var dbContext = CreateDbContext())
{
var entity = await dbContext.Autors.FirstOrDefaultAsync(s => s.Id == autor.Id);
entity.Jmeno = autor.Jmeno;
entity.Prijmeni = autor.Prijmeni;
entity.ProstredniJmeno = autor.ProstredniJmeno;
entity.Narozeni = autor.Narozeni;
if(autor.Umrti!=null)
entity.Umrti = autor.Umrti;
entity.Bio = autor.Bio;
entity.Narodnost = autor.Narodnost;
entity.Obrazek = autor.Obrazek;
await dbContext.SaveChangesAsync();
}
}
我卡住了。我正在创建一个作者数据库,运行 出了问题。我需要将值 Umrti(死亡日期)作为空值保存到数据库,但它始终将该值保存为 01.01.0001。我尝试了一些东西,现在我的代码如下所示:
public class AutorDetailModel
{
public int Id { get; set; }
[Required]
public string Jmeno { get; set; }
[Required]
public string Prijmeni { get; set; }
public string ProstredniJmeno { get; set; }
[DotvvmEnforceClientFormat]
public DateTime Narozeni { get; set; }
[DotvvmEnforceClientFormat]
public DateTime? Umrti { get; set; }
public string Bio { get; set; }
public string Narodnost { get; set; }
public byte Obrazek { get; set; }
}
在这样的服务中:
public async Task UpdateAutorAsync(AutorDetailModel autor)
{
using (var dbContext = CreateDbContext())
{
var entity = await dbContext.Autors.FirstOrDefaultAsync(s => s.Id == autor.Id);
entity.Jmeno = autor.Jmeno;
entity.Prijmeni = autor.Prijmeni;
entity.ProstredniJmeno = autor.ProstredniJmeno;
entity.Narozeni = autor.Narozeni;
entity.Umrti = autor.Umrti;
entity.Bio = autor.Bio;
entity.Narodnost = autor.Narodnost;
entity.Obrazek = autor.Obrazek;
await dbContext.SaveChangesAsync();
}
}
但是,autor.Umrti 仍然给我这个错误:
Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)
我真的被困住了,将不胜感激任何建议。谢谢
抱歉我的英语不好:)
如果您正在使用 SQL 服务器(也可能是其他数据库引擎),那么您不能在 DateTime 字段中保存 NULL 值。
您必须将 NULL 转换为日期,任何日期,才能将其保存在数据库中。通常 SQL 服务器使用“1900-01-01”来表示 NULL 日期。在大多数情况下这很好,因为除非您使用的是 18 世纪末左右的历史数据,否则它不会与您的有效数据发生冲突。从数据库中读取时,您可以在代码中将所有值为“1900-01-01”的日期转换为 null,而在写入数据库时,如果代码中的值为 null,则将其转换为“1900-01-01” .
您必须检查 Umrti 是否为空
public async Task UpdateAutorAsync(AutorDetailModel autor)
{
using (var dbContext = CreateDbContext())
{
var entity = await dbContext.Autors.FirstOrDefaultAsync(s => s.Id == autor.Id);
entity.Jmeno = autor.Jmeno;
entity.Prijmeni = autor.Prijmeni;
entity.ProstredniJmeno = autor.ProstredniJmeno;
entity.Narozeni = autor.Narozeni;
if(autor.Umrti!=null)
entity.Umrti = autor.Umrti;
entity.Bio = autor.Bio;
entity.Narodnost = autor.Narodnost;
entity.Obrazek = autor.Obrazek;
await dbContext.SaveChangesAsync();
}
}