в настоящее время я пытаюсь разгадать загадку EntityFramework , магически изменяющую мою собственность во время SaveChanges
, поэтому по какой-то причине следующий отсканированный код решает изменить значение ReceiptEntry
всегда 10 или 12
void HandleReceipt(DBContext cntxt, Receipt receipt, ...)
{
[...]
var receiptEntries = receipt.GetEntries(cntxt);
var receiptEntriesItem = from q in cntxt.Items
where ...
select new { ... };
var receiptEntriesItemDictionary = receiptEntriesItem.ToDictionary(...);
[...]
while (...)
{
[...]
var receiptEntry = receiptEntriesItemDictionary[it.ItemFK];
[...]
foreach (var kvp in ...)
{
var sle = usedStorages.First((sl) => sl.Id == kvp.Key);
entry = new PickListEntry
{
Parent = receipt.PickList,
Amount = kvp.Value,
ReceiptEntry = receiptEntry, // receiptEntry is the instance with eg. Id 60
StorageLocation = sle
};
sle.Stock = new Stock { AmountAvailable = 0, ItemFK = receiptEntry.ItemFK };
var createdEntry = cntxt.PickListEntries.Add(entry);
cntxt.SaveChanges(); // ReceiptEntry property gets modified in here to the instance with 10 or 12
[...]
}
[...]
}
}
, сейчас я не знаю, почему это может произойти.
10 и 12 - это записи, которые не относятся к текущим работам на receipt
каким-либо образом (однако они загружаются в текущий cntxt
и обрабатываются в другом вызове HandleReceipt
)
Я уже трижды проверил, что эти два никогда не назначаются нигде (запись только когда-либо используется прямо тами никогда после этого здесь) и проверил, когда они меняются (Знаменитый [External Code]
точно на один шаг ниже установщика)
Кто-нибудь способен сказать мне, почему это происходит и как это исправить?Раскрутить еще один DBContext
не вариант, так как это происходит внутри транзакции (cntxt.Database.BeginTransaction()
) (иначе: что-то не получается означает, что все нужно откатить)