WinForms 中的 EF 代码结构
EF Code Structure in WinForms
我的代码结构需要一些帮助!
我有一个表单,其中包含一些必填字段和一些可选字段。
我 运行 在将记录保存到数据库之前进行一些验证,以确保数据符合完整性规则。如果正确验证了数据,则可以保存数据。问题集与我的可选字段,组合框:
private async void SaveRecord()
{
if (ValidateForm())
{
int sucessReg = 0;
try
{
var memberRecord = new ClubMember()
{// Tab ID
Name = txtName.Text,
Surname = txtSurname.Text,
PassportNumber = (Int32)txtPasspt.text,
MaritalStatus = cboMarital.SelectedValue.ToString(),
Gender = cboGender.SelectedValue.ToString(),
DOB = dtpDob.Value,
DataEntrada = dtpDataEntra.Value,
Photo = ConvertImgToBinary(picBoxPhoto.Image),
Country = cboCountry.SelectedValue.ToString(),
};
ctxt.CubMember.Add(memberRecord);
sucessReg = await ctxt.SaveChangesAsync();
if (sucessReg == 1)
{
MessageBox.Show(this, "Record successfully saved.", "System Message");
}
}
catch (TargetInvocationException ex)
{
string err;
err = ex.ToString();
if (ex.InnerException != null)
{
err = ex.InnerException.Message;
}
MessageBox.Show(err);
}
}
}
由于某些组合框是可选的,并且在保存时 selectedValue 属性 为空,因此编译器会抛出错误 "Object reference not set to an instance of an object."
可选字段应保持原样,也就是说,如果用户未选择组合列表中的任何项目,则在数据库中应为空。
所以,我需要一种更好的方法来构建我的代码以解决这个问题。
有没有人有一个绝妙的主意? :-)
提前致谢。
如果您正在使用 C#6
,您可以在使用 .ToString()
之前使用 ?.
空条件运算符来检查 ComboBox.SelectedValue
是否为 null
:
var memberRecord = new ClubMember()
{// Tab ID
Name = txtName.Text,
Surname = txtSurname.Text,
PassportNumber = (Int32)txtPasspt.text,
MaritalStatus = cboMarital.SelectedValue?.ToString(),
Gender = cboGender.SelectedValue?.ToString(),
DOB = dtpDob.Value,
DataEntrada = dtpDataEntra.Value,
Photo = ConvertImgToBinary(picBoxPhoto.Image),
Country = cboCountry.SelectedValue?.ToString(),
};
相当于:
var memberRecord = new ClubMember()
{// Tab ID
Name = txtName.Text,
Surname = txtSurname.Text,
PassportNumber = (Int32)txtPasspt.text,
MaritalStatus = cboMarital.SelectedValue == null ? null : cboMarital.SelectedValue.ToString(),
Gender = cboGender.SelectedValue == null ? null : cboGender.SelectedValue.ToString(),
DOB = dtpDob.Value,
DataEntrada = dtpDataEntra.Value,
Photo = ConvertImgToBinary(picBoxPhoto.Image),
Country = cboCountry.SelectedValue == null ? null : cboCountry.SelectedValue.ToString(),
};
我的代码结构需要一些帮助!
我有一个表单,其中包含一些必填字段和一些可选字段。 我 运行 在将记录保存到数据库之前进行一些验证,以确保数据符合完整性规则。如果正确验证了数据,则可以保存数据。问题集与我的可选字段,组合框:
private async void SaveRecord()
{
if (ValidateForm())
{
int sucessReg = 0;
try
{
var memberRecord = new ClubMember()
{// Tab ID
Name = txtName.Text,
Surname = txtSurname.Text,
PassportNumber = (Int32)txtPasspt.text,
MaritalStatus = cboMarital.SelectedValue.ToString(),
Gender = cboGender.SelectedValue.ToString(),
DOB = dtpDob.Value,
DataEntrada = dtpDataEntra.Value,
Photo = ConvertImgToBinary(picBoxPhoto.Image),
Country = cboCountry.SelectedValue.ToString(),
};
ctxt.CubMember.Add(memberRecord);
sucessReg = await ctxt.SaveChangesAsync();
if (sucessReg == 1)
{
MessageBox.Show(this, "Record successfully saved.", "System Message");
}
}
catch (TargetInvocationException ex)
{
string err;
err = ex.ToString();
if (ex.InnerException != null)
{
err = ex.InnerException.Message;
}
MessageBox.Show(err);
}
}
}
由于某些组合框是可选的,并且在保存时 selectedValue 属性 为空,因此编译器会抛出错误 "Object reference not set to an instance of an object." 可选字段应保持原样,也就是说,如果用户未选择组合列表中的任何项目,则在数据库中应为空。
所以,我需要一种更好的方法来构建我的代码以解决这个问题。 有没有人有一个绝妙的主意? :-)
提前致谢。
如果您正在使用 C#6
,您可以在使用 .ToString()
之前使用 ?.
空条件运算符来检查 ComboBox.SelectedValue
是否为 null
:
var memberRecord = new ClubMember()
{// Tab ID
Name = txtName.Text,
Surname = txtSurname.Text,
PassportNumber = (Int32)txtPasspt.text,
MaritalStatus = cboMarital.SelectedValue?.ToString(),
Gender = cboGender.SelectedValue?.ToString(),
DOB = dtpDob.Value,
DataEntrada = dtpDataEntra.Value,
Photo = ConvertImgToBinary(picBoxPhoto.Image),
Country = cboCountry.SelectedValue?.ToString(),
};
相当于:
var memberRecord = new ClubMember()
{// Tab ID
Name = txtName.Text,
Surname = txtSurname.Text,
PassportNumber = (Int32)txtPasspt.text,
MaritalStatus = cboMarital.SelectedValue == null ? null : cboMarital.SelectedValue.ToString(),
Gender = cboGender.SelectedValue == null ? null : cboGender.SelectedValue.ToString(),
DOB = dtpDob.Value,
DataEntrada = dtpDataEntra.Value,
Photo = ConvertImgToBinary(picBoxPhoto.Image),
Country = cboCountry.SelectedValue == null ? null : cboCountry.SelectedValue.ToString(),
};