我刚刚开始使用Entity框架,我对业务层中通常的类如何适应实体框架创建的实体感到困惑.
使用经典的ADO.NET时,我会有一个名为Customer的类,然后是另一个名为DALCustomer的类来处理数据库交互,在这个结构中,我会把代码放到计算,过滤和删除DAL的实例中.客户在Customer类中保存,更新和删除.
使用Entity Framework,如果您有一个名为Customer的表,Entity框架会创建一个名为Customer的实体,这就是我的困惑开始的地方,这个实体是否消除了业务层中对Customer的需求?因此,实质上通常在业务层中的所有字段和方法都在实体框架生成的实体中?或者,如果一个类仍然存在于名为CustomerBL的业务层中,那么它仍然包含完成计算,过滤所需的业务逻辑所需的字段和方法,并且仍然需要声明处理数据访问的EF DAL实例?
如果应该有一个业务类,在这种情况下是CustomerBL,另外还有一个问题,如果客户实体中创建的字段在CustomerBL中重新创建,或者应该在CustomerBL中声明Customer实体的实例,那么就会有不需要在2个位置声明字段?
我正在寻找一种有效的方法来在提交数据后清除我的winform.目前我使用一个静态方法,它接受一个控件作为参数,然后遍历控件,确定控件的类型,然后清除控件的内容.它工作得很好,但我遇到的问题是控制事件.当我清除控件时,控件事件将触发,并且由于事件中存在数据类型转换(例如int.Parse),因此会导致错误,因为一旦清除控件,将触发控件事件并且空字符串为传递给int.Parse.除了在控件事件中使用一堆if语句或int.TryParse以防止数据转换发生时,是否有更好的方法来清除控件而不是在进程中触发它的事件?
谢谢
以下是我的控件事件和清除方法的示例:
private void Quantity_TextChanged(object sender, EventArgs e)
{
presenter.Quantity = int.Parse(Quantity.Text);
}
public static void ClearForm(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
if (ctrl.GetType() == typeof(TextBox))
{
((TextBox)ctrl).Text = "";
}
if (ctrl.GetType() == typeof(ComboBox))
{
((ComboBox)ctrl).SelectedIndex = 0;
}
if (ctrl.GetType() == typeof(DateTimePicker))
{
DateTimePicker datePicker = ctrl as DateTimePicker;
//datePicker.Format = DateTimePickerFormat.Custom;
datePicker.CustomFormat = "dd-MMM-yyyy";
datePicker.Value = DateTime.Today;
}
if (ctrl.HasChildren)
{
ClearForm(ctrl.Controls);
}
}
}
Run Code Online (Sandbox Code Playgroud)