我如何存储一个空值在我的数据库从使用实体框架的形式

本文关键字:数据库 实体 框架 我的 空值 何存储 存储 一个 | 更新日期: 2023-09-27 17:50:18

我有一个数据库,有2个字段来收集出生日期和年龄。因为我们并不总是拥有这些数据,所以这些字段是可空的。当插入新记录时,我使用实体框架和如下所示的代码。

la.DOB = DateTime.Parse(txtDOB.Text);
la.Age = Int32.Parse(txtAge.Text);

除非这两个字段中的任何一个没有数据,否则该过程有效。由于字符串中存在空值,解析失败。我如何将空值传递给实体框架。我试过使用TryParse,但似乎无法获得语法正确。

我通过将代码更改为解决了这个问题DateTime强加于人;如果(DateTime.TryParse (txtDOB。文本,输出时间)){洛杉矶。Dob = Dob;}其他的洛杉矶。DOB = (DateTime?)null;

我如何存储一个空值在我的数据库从使用实体框架的形式

您应该使用DateTime.TryParseint.TryParse,正如您已经说过的

DateTime dob;
int age;
if (DateTime.TryParse(txtDOB.Text, out dob) 
{
  la.DOB = dob
}
if (int.TryParse(txtAge.Text, out age) 
{
  la.Age = age
}

在创建要执行的查询之前获取DOB和年龄,因此EF不会尝试将。net方法转换为SQL代码:

DateTime? dob = null;
if (txtDOB.Text == "")
    dob = DateTime.Parse(txtDOB.Text);
int? age = null;
if (txtAge.Text == "")
    age = Int32.Parse(txtAge.Text);

然后在查询中使用这些值:

la.DOB = dob;
la.Age = age;

以上代码假设用户输入的任何数据都是有效的。你可以做额外的验证,或者你可以使用一些限制用户输入的控件,比如DateTime选择器或NumericUpDown控件(取决于你设计应用的平台)。

这并没有直接回答你的问题,但是…

如果您不经常更新记录,Age属性将很快过期。如果你在5年内没有触碰记录,那么DOB仍然是正确的,但Age将会偏离5年。

除非您的数据库坚持拥有这两个值,并且您不控制它的模式,否则您最好只在数据库中存储DOB。年龄可以很容易地在实体对象中计算。

这个问题的解决方案是使用TryParse和else语句来传递空值,如果表单字段为空的话。如果有人遇到这个问题,这里是代码DateTime强加于人;如果(DateTime.TryParse (txtDOB。文本,输出时间)){洛杉矶。Dob = Dob;}其他的洛杉矶。DOB = (DateTime?)null;