gpt4 book ai didi

nhibernate - 如何使用将项目添加到 NHibernate 持久 IList 的 MassTransit Saga 确保良好的性能

转载 作者:行者123 更新时间:2023-12-04 18:20:52 24 4
gpt4 key购买 nike

我有一个有 3 个状态的传奇 -

    public static State Initial { get; set; }
public static State ReceivingRows { get; set; }
public static State Completed { get; set; }

当它收到 BofMessage(其中 Bof = 文件开头)时,它从 Initial 转换为 ReceivingRows。在 BofMessage 之后,它会接收大量 RowMessage,其中每个都描述平面文件中的一行。发送完所有 RowMessage 后,将发送 EofMessage 并且状态更改为 Completed。观察 -
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);
}

这有效,只是它具有 n 平方性能。使用 NHProf 进行调查显示,每行添加都会导致 完整列表 行数为:

a) 从数据库中选择

B) 从数据库中删除

C) 重新插入数据库。

这对我来说似乎是非常糟糕的行为。添加一行所需要做的就是……好吧,向数据库中添加一行!添加操作实际上是我对行列表所做的唯一事情。当我们在列表中有 10,000 个项目时,这不会扩展。

有谁知道如何让这个传奇更加理智的表现行为?

顺便说一句-如果需要,这是 IList 的映射方式-
        HasMany(x => x.Rows)
.Table("OwnerHistorySagaRow")
.KeyColumn("CorrelationId")
.Element("Row")
.Cascade.AllDeleteOrphan();

谢谢!

最佳答案

我知道这是一个死物,但这是让包正常工作的真正答案。

Bag(x => x.Rows, c =>
{
c.Key(k =>
{
k.Column("RowCorrelationId");
k.ForeignKey("FK_State_Row");
k.NotNullable(true);
});
c.Fetch(CollectionFetchMode.Join);
c.Lazy(CollectionLazy.NoLazy);
c.Cascade(Cascade.All);
}, r => r.OneToMany());
Rows 的类类型是 IList<Row> .

关于nhibernate - 如何使用将项目添加到 NHibernate 持久 IList 的 MassTransit Saga 确保良好的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com