我想要使用单个表单保存新记录和更新现有记录 但有两个构造函数(一个有参数,另一个没有)。调用的构造函数应确定应调用哪个方法(保存或更新)。
public ManageRecord(Record record ){ //update record }
public ManageRecord(){ //save new record }
private void Save_Click(object sender, RoutedEventArgs e){
//if default constructor invokes form call save method
SaveMethod();
//if constructor with parameters invokes form call update method
UpdateMethod(record);
}
我如何实现这一目标?
答案 0 :(得分:1)
我过去为解决此问题而做的是将模型上的主键字段作为Nullable
字段。当您尝试保存记录时,只需查看模型上的字段,如果MyPk.HasValue
返回true
,那么您正在更新记录,如果是false
,则表示您正在插入新记录。
当您调用采用模型实例的构造函数时,只需将其保存在本地字段中即可。当调用没有模型的构造函数时,使用null PK创建一个新的模型实例,并将其保存在本地字段中。 Save
可以检查本地字段。
因此,最后,您的操作不是直接基于调用的构造函数,而是应该基于您当前使用的模型的状态。
答案 1 :(得分:0)
您只需在构造函数中设置一个布尔值即可。
private readonly bool _isNewEntity;
public ManageRecord()
{
_isNewEntity = true;
// Same as existing, _record = new Record() ?
}
public ManageRecord(Record record)
{
_isNewEntity = false;
// Same as existing, _record = record ?
}
private void Save_Click(object sender, RoutedEventArgs e)
{
if (_isNewEntity)
SaveMethod();
else
UpdateMethod(record);
}