C# 当使用相同的表单时,如何知道这是新数据还是更新数据

C# 当使用相同的表单时,如何知道这是新数据还是更新数据,c#,.net,winforms,C#,.net,Winforms,我想使用一个表单来添加和编辑数据。我有两个这样的构造函数 public AddEditForm(IBookRepository repository) { InitializeComponent(); this.repository = repository; } public AddEditForm(IBookRepository repository, Book book) : this(repository) { Book

我想使用一个表单来添加和编辑数据。我有两个这样的构造函数

public AddEditForm(IBookRepository repository)
{
   InitializeComponent();
   this.repository = repository;            
}
public AddEditForm(IBookRepository repository, Book book)
            : this(repository)
{
    Book data = repository.GetDetails(book.Id);
    if (data != null)
    {
        PopulateFormFields(data);
    }
    else
    {
        MessageBox.Show("Could'nt find requested book!");
    }
}
我的问题是,当用户点击ok按钮时,我怎么知道这是新记录还是更新操作


我应该使用private
Book\u Book
属性吗?该属性将在使用第二个构造函数时填充,在btn ok操作中,我需要检查数据库中是否存在该书(这是不必要的db往返)或者我应该遵循一些更好的模式?

好吧,您正在传递一本现有的
书籍,因此这将是您正在更新书籍的指标。为了可读性,你可以把它包装在一个好的属性中,例如

public bool IsNew { get { return _book == null; } }
或者,为了避免保留对现有书籍的引用,您可以将其设置为可写属性,并在构造函数上设置get,即

public AddEditForm(IBookRepository repository)
{
    IsNew = true;
    ...
}

public bool IsNew { get; private set; }
我们不需要在重载构造函数中将其设置为
false
,因为C#中的
bool