【发布时间】:2018-02-19 03:41:16
【问题描述】:
我是 Entity Framework 的新手,我已经在 google 中搜索过这个问题,但我什么也没找到。我收到错误
更新条目时出错。有关详细信息,请参阅内部异常。
当我检查内部异常时,我看到了这个
无法将值 NULL 插入到列“DOCNUM”、表“TCPIDBV2.dbo.tbl_200_Dailyreport”中;列不允许空值。插入失败。
但是当我检查我传入的要保存在数据库中的记录时,该对象中有一个名为“DOCNUM”的值
这是我的代码:
[Table("tbl_200_Dailyreport")]
public class tbl_200_Dailyreport
{
[Key]
[Required]
public long DOCNUM {get; set;}
public DateTime DAILYREPDATE {get; set;}
public string SECTION {get; set;}
public string REMARKS { get; set; }
public int? OPERATIONTIME { get; set; }
public int? PREPARATIONTIME { get; set; }
public int? STANDBYTIME { get; set; }
public int? MATERIALWAITING { get; set; }
public int? ASSISTTIME { get; set; }
public int? MAINTENANCETIME { get; set; }
public int? CLEANINGTIME { get; set; }
public bool? ISOVERTIME { get; set; }
public bool? ISLOCKED { get; set; }
public string SHIFT { get; set; }
public int? PRODTIME { get; set; }
public int? BREAKTIME { get; set; }
public double? TOTALCOLOR { get; set; }
public double? AVERAGECOLOR { get; set; }
}
获取上述值的代码如下:
tbl_200_Dailyreport.DOCNUM = long.Parse(txtReferenceNo.Text);
tbl_200_Dailyreport.PRODTIME = Convert.ToInt32(txtProduction.Text);
tbl_200_Dailyreport.OPERATIONTIME = Convert.ToInt32(txtOperation.Text);
tbl_200_Dailyreport.PREPARATIONTIME = Convert.ToInt32(txtPreparation.Text);
tbl_200_Dailyreport.STANDBYTIME = Convert.ToInt32(txtStandby.Text);
tbl_200_Dailyreport.MAINTENANCETIME = Convert.ToInt32(txtMaintenance.Text);
tbl_200_Dailyreport.CLEANINGTIME = Convert.ToInt32(txtCleaning.Text);
tbl_200_Dailyreport.MATERIALWAITING = Convert.ToInt32(txtMaterial.Text);
tbl_200_Dailyreport.ASSISTTIME = Convert.ToInt32(txtAssist.Text);
tbl_200_Dailyreport.BREAKTIME = Convert.ToInt32(txtOthers.Text);
tbl_200_Dailyreport.DAILYREPDATE = dtpDailyReportDate.Value;
tbl_200_Dailyreport.SHIFT = cboShift.SelectedValue.ToString();
tbl_200_Dailyreport.ISOVERTIME = cbxOvertime.Checked;
tbl_200_Dailyreport.ISLOCKED = false;
tbl_200_Dailyreport.REMARKS = txtRemarks.Text;
if (!String.IsNullOrEmpty(cboSecDepartment.Text))
{
tbl_200_Dailyreport.SECTION = cboSecDepartment.SelectedValue.ToString();
}
else
{
var section = "0";
tbl_200_Dailyreport.SECTION = section;
}
我允许除名为“DOCNUM”的 PK 之外的所有列为空,因此在获取“DOCNUM”的值时,txtreferenceno.Text 的值等于 1。并在 DailyReportManager 中传递它,所以这里是代码:
public void Save(tbl_200_Dailyreport records)
{
try
{
this.db.tbl_200_Dailyreport.Add(records);
this.db.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
并在获取txtreferenceno.Text的值
var max = dailyreportmanager.FindAll().Max(x => (int?)x.DOCNUM) ?? 0;
var addMax = max + 1;
txtReferenceNo.Text = Convert.ToString(addMax);
所以对于我的数据库的设计
请允许我发一张截图:
当我检查记录时,“DOCNUM”的值等于 1,但为什么我仍然收到该错误?请帮忙。提前非常感谢。
【问题讨论】:
-
DOCNUM是自动生成/自动增量列吗?查看表的 SQL 定义可能会有所帮助。 -
@Ron Beyer 我编辑了我的帖子。现在好点了吗?
-
@mjwill 哇,你真是个天才。非常感谢您的建议解决了我的问题。
标签: c# entity-framework