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(),
};