嵌套的工作单元并制作不需要的对象
nested unit of work and making unwanted object
我的应用程序中有 3 个表单:frmTrucks、frmEditTruck 和 frmEditContent。
frmTrucks 在网格中显示我的卡车。
我添加一辆卡车,或者从网格中选择一辆卡车在 frmEditTruck 中编辑
public void Edit()
{
using (NestedUnitOfWork nuow = session.BeginNestedUnitOfWork())
{
Truck currentTruck = nuow.GetNestedObject(
xpcTruck[gvTruck.GetDataSourceRowIndex(gvTruck.FocusedRowHandle)])
as Truck;
using (frmEditTruck form = new frmEditTruck(currentTruck))
{
if (form.ShowDialog() == DialogResult.OK)
nuow.CommitChanges();
}
}
}
在 frmEditTruck 中有一些卡车属性文本框和两个按钮。
btnSave 和 btnAddContent。 btnSave 保存更改 (now.CommitChanges();)。 btnAddContent 的点击代码是:
Truck truck;
Session session;
public frmEditTruck(Truck truck)
{
InitializeComponent();
this.truck = truck;
this.session = truck.Session;
}
private void btnAddContent_Click(object sender, EventArgs e)
{
TContent content = new TContent(session);
using (frmEditTContent form = new frmEditTContent(content, truck))
{
if (form.ShowDialog() == DialogResult.OK)
truck.TContents.Add(content);
}
}
它显示 frmEditContent。我可以将内容添加到我的卡车。问题是当我按下 AddContent 然后取消它时。之后,当我按下 frmEditTruck 上的保存按钮时,它会在我的内容 Table 中添加一个空行。我想解决这个问题。我该如何解决?我不确定我的问题对你来说是否足够清楚。请告诉我
public class Truck : XPObject
{
.
.
.
[Association("Truck-TContents")]
public XPCollection<TContent> TContents { get { return GetCollection<TContent>("TContents"); } }
}
public class TContent : XPObject
{
.
.
.
private Truck truck;
[Association("Truck-TContents")]
public Truck Truck
{
get
{
return truck;
}
set
{
SetPropertyValue("Truck", ref truck, value);
}
}
}
private void btnAddContent_Click(object sender, EventArgs e)
{
TContent content = new TContent(session);
using (frmEditTContent form = new frmEditTContent(content, truck))
{
if (form.ShowDialog() == DialogResult.OK)
truck.TContents.Add(content);
}
}
我已将代码更改为:
private void btnAddContent_Add(object sender, EventArgs e)
{
TContent content = new TContent(session);
using (frmEditTContent form = new frmEditTContent(content, truck))
{
if (form.ShowDialog() == DialogResult.OK)
{
truck.TContents.Add(content);
}
else
{
if (session.TrackingChanges)
session.RollbackTransaction();
}
}
}
并且它工作正常。
我的应用程序中有 3 个表单:frmTrucks、frmEditTruck 和 frmEditContent。 frmTrucks 在网格中显示我的卡车。 我添加一辆卡车,或者从网格中选择一辆卡车在 frmEditTruck 中编辑
public void Edit()
{
using (NestedUnitOfWork nuow = session.BeginNestedUnitOfWork())
{
Truck currentTruck = nuow.GetNestedObject(
xpcTruck[gvTruck.GetDataSourceRowIndex(gvTruck.FocusedRowHandle)])
as Truck;
using (frmEditTruck form = new frmEditTruck(currentTruck))
{
if (form.ShowDialog() == DialogResult.OK)
nuow.CommitChanges();
}
}
}
在 frmEditTruck 中有一些卡车属性文本框和两个按钮。 btnSave 和 btnAddContent。 btnSave 保存更改 (now.CommitChanges();)。 btnAddContent 的点击代码是:
Truck truck;
Session session;
public frmEditTruck(Truck truck)
{
InitializeComponent();
this.truck = truck;
this.session = truck.Session;
}
private void btnAddContent_Click(object sender, EventArgs e)
{
TContent content = new TContent(session);
using (frmEditTContent form = new frmEditTContent(content, truck))
{
if (form.ShowDialog() == DialogResult.OK)
truck.TContents.Add(content);
}
}
它显示 frmEditContent。我可以将内容添加到我的卡车。问题是当我按下 AddContent 然后取消它时。之后,当我按下 frmEditTruck 上的保存按钮时,它会在我的内容 Table 中添加一个空行。我想解决这个问题。我该如何解决?我不确定我的问题对你来说是否足够清楚。请告诉我
public class Truck : XPObject
{
.
.
.
[Association("Truck-TContents")]
public XPCollection<TContent> TContents { get { return GetCollection<TContent>("TContents"); } }
}
public class TContent : XPObject
{
.
.
.
private Truck truck;
[Association("Truck-TContents")]
public Truck Truck
{
get
{
return truck;
}
set
{
SetPropertyValue("Truck", ref truck, value);
}
}
}
private void btnAddContent_Click(object sender, EventArgs e)
{
TContent content = new TContent(session);
using (frmEditTContent form = new frmEditTContent(content, truck))
{
if (form.ShowDialog() == DialogResult.OK)
truck.TContents.Add(content);
}
}
我已将代码更改为:
private void btnAddContent_Add(object sender, EventArgs e)
{
TContent content = new TContent(session);
using (frmEditTContent form = new frmEditTContent(content, truck))
{
if (form.ShowDialog() == DialogResult.OK)
{
truck.TContents.Add(content);
}
else
{
if (session.TrackingChanges)
session.RollbackTransaction();
}
}
}
并且它工作正常。