我有一个有3个州的传奇
public static State Initial { get; set; }
public static State ReceivingRows { get; set; }
public static State Completed { get; set; }
它从初始版本转换为接收记录, 当它得到一个 BofMessage ( Bof = 文件起始处) 。 在 BofMessage 之后, 它会收到大量 RowMessage, 其中每个文件在平坦文件中描述一行 。 一旦所有RowMessage 发送, 就会发送一个 EofMessage, 并对状态进行修改 。 观察 - 查看 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示 - 显示
static void DefineSagaBehavior()
{
Initially(When(ReceivedBof)
.Then((saga, message) => saga.BeginFile(message))
.TransitionTo(ReceivingRows));
During(ReceivingRows, When(ReceivedRow)
.Then((saga, message) => saga.AddRow(message)));
During(ReceivingRows, When(ReceivedRowError)
.Then((saga, message) => saga.RowError(message)));
During(ReceivingRows, When(ReceivedEof)
.Then((saga, message) => saga.EndFile(message))
.TransitionTo(Completed));
}
public override void OnAddRow(ParcelRowMessage message)
{
// ensure isCauvReturned is "Y"
var fields = message.Value;
var isCauvReturned = fields[33] == "Y";
if (!isCauvReturned)
return;
// add row with just parcel number
var parcelNumber = fields[1];
var row = parcelNumber;
_rows.Add(row);
}
使用 NHProf 调查显示,每行添加一个“ 强” 的行,导致该行的 " 强 " / " 强 " 列表:
A) 从数据库中选择
B) 从数据库中删除
C) 重新输入数据库。
这对我来说似乎是非常糟糕的行为。 添加一行所需要的只是... 那么, 在数据库中添加一行! 添加操作实际上是我对行列表所做的唯一一件事 。 当我们在列表中有 10,000 秒的项目时, 这不会缩放 。
有没有人知道怎么让这个 假象更正常的性能行为吗?
BTW - 这里如何绘制 IList 的地图, 如果你需要的话 -
HasMany(x => x.Rows)
.Table("OwnerHistorySagaRow")
.KeyColumn("CorrelationId")
.Element("Row")
.Cascade.AllDeleteOrphan();
谢谢!