可以在部分 class 中扩展构造函数吗?
Possible to extend constructor in partial class?
我正在使用 MS Access 数据库(我知道...),因此为了捕获自动生成的主键,我正在扩展 table 适配器 class。我花了一些时间来弄清楚这部分,所以如果这是你的问题,以后 reader,右键单击你的数据集文件 (*.xsd) 和 select 查看代码。这将创建部分 class。 GetLastID()
方法只是一个带有 SELECT @@IDENTITY
的查询。诀窍是它必须在更新行时完成,而不是关闭和打开新连接,因此需要处理 RowUpdated
事件。这是相关代码:
namespace TimeTrack.TimeTrackDataSetTableAdapters
{
public partial class TimeSlipsTableAdapter
{
public void CustomSetup()
{
Adapter.RowUpdated += Adapter_RowUpdated;
}
private void Adapter_RowUpdated(object sender, OleDbRowUpdatedEventArgs e)
{
if (e.StatementType == StatementType.Insert && e.Errors == null)
{
int lastID = (int)GetLastID();
e.Row["ID"] = lastID;
e.Status = UpdateStatus.SkipCurrentRow;
}
}
}
}
我的问题是:有没有办法避免调用 CustomSetup()
方法?
我想以某种方式将事件处理程序分配包含在 table 适配器的构造中,而无需进行额外的调用。有办法吗?
我认为您已经找到了最佳解决方案。虽然您可以添加新的构造函数(具有不同的签名),但在 C# 中,部分 类 无法向构造函数添加额外的步骤。唯一的方法是使用方法。
我正在使用 MS Access 数据库(我知道...),因此为了捕获自动生成的主键,我正在扩展 table 适配器 class。我花了一些时间来弄清楚这部分,所以如果这是你的问题,以后 reader,右键单击你的数据集文件 (*.xsd) 和 select 查看代码。这将创建部分 class。 GetLastID()
方法只是一个带有 SELECT @@IDENTITY
的查询。诀窍是它必须在更新行时完成,而不是关闭和打开新连接,因此需要处理 RowUpdated
事件。这是相关代码:
namespace TimeTrack.TimeTrackDataSetTableAdapters
{
public partial class TimeSlipsTableAdapter
{
public void CustomSetup()
{
Adapter.RowUpdated += Adapter_RowUpdated;
}
private void Adapter_RowUpdated(object sender, OleDbRowUpdatedEventArgs e)
{
if (e.StatementType == StatementType.Insert && e.Errors == null)
{
int lastID = (int)GetLastID();
e.Row["ID"] = lastID;
e.Status = UpdateStatus.SkipCurrentRow;
}
}
}
}
我的问题是:有没有办法避免调用 CustomSetup()
方法?
我想以某种方式将事件处理程序分配包含在 table 适配器的构造中,而无需进行额外的调用。有办法吗?
我认为您已经找到了最佳解决方案。虽然您可以添加新的构造函数(具有不同的签名),但在 C# 中,部分 类 无法向构造函数添加额外的步骤。唯一的方法是使用方法。