Mam mega zagwozdkę. Krótko - w aplikacji webowej edytowane są transakcje i jeżeli zmiana dotyczy kwot albo dat transakcji, wysyłana jest informacja na kolejkę, że trzeba przeliczyć salda. To odczytuje aplikacja konsolowa, która dokonuje na bazie przeliczeń.
Rzecz w tym, że aplikacja bierze pod uwagę tylko pierwszą zmianę w bazie. Jeżeli zmieniam datę transakcji na danym rekordzie, to przy pierwszym komunikacie aplikacja zaczytuję tę datę z bazy, natomiast już jak drugi raz zmienię datę transakcji dla tego samego rekordu, to aplikacja czyta cały czas tę poprzednią wartość. Oczywiście w samej bazie jest poprawnie. Chyba coś jest porąbane z obsługą bazy w tej aplikacji konsolowej. Podaje istotne części kodu. Wiadomości z kolejki się zaczytują poprawnie, problem pojawia się tylko przy odczycie danych z bazy.
public class BavServiceDbContext: DbContext
{
public DbSet<Account> Accounts { get; set; }
public DbSet<Transaction> Transactions { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql(conn, MySqlServerVersion.LatestSupportedServerVersion);
}
}
class Program
{
static readonly BavServiceDbContext _ctx = new BavServiceDbContext();
static void Main(string[] args)
using (var bus = RabbitHutch.CreateBus(conn_rabbit))
{
Console.WriteLine("Connected to RabbitMQ.");
SubClient(bus);
}
}
private static void SubClient(IBus bus)
{
using (var sub = bus.PubSub.Subscribe<RecalcBalanceReq>("bav", msg => PubMessageReceived(msg)))
{
while (true)
{
Thread.Sleep(100);
}
}
}
private static void PubMessageReceived(RecalcBalanceReq msg)
{
var tran = _ctx.Transactions.Where(x => x.IdTransaction == msg.IdTransaction).FirstOrDefault();
Console.WriteLine("New TransactionDate: {0}", tran.TransactionDate);
}