Reputation: 2906
I have an issue related to updating an object by reference and not sure exactly what is going on.
I need to delete a list of rules and for logging I need to load another field
ruleItem.ReferencedItemValue = eventEntity.Title;
When
builder.LogDelete(showRule, showRuleResource.ToAuditLog(), "Logic Rule");
is called the ReferencedItemValue
is not populated.
Any ideas, suggestions, alternatives? Thanks
CODE:
public void DeleteCustomLogicRule(int[] ruleIds){
var rules = uow.Context.ShowRules.Where(sr => ruleIds.Contains(sr.Id)).ToList();
if (rules.Any())
{
var showId = rules.FirstOrDefault().ShowId;
var builder = AuditBuilder.FromShowId(showId);
rules.ForEach(showRule =>
{
var showRuleResource = ToShowRuleResource(showRule);
FillReferenceValue(showRuleResource);
builder.LogDelete(showRule, showRuleResource.ToAuditLog(), "Logic Rule");
});
uow.Context.SaveChanges();
builder.ToDatabase();
}
}
private void FillReferenceValue(ShowRuleResource showRuleResource)
{
foreach (var ruleItem in showRuleResource.ItemsPredicateAppliesTo.ToList())
{
FillRuleItem(ruleItem);
}
}
private void FillRuleItem(RuleItemResource ruleItem)
{
var eventEntity = uow.Context.Events.FirstOrDefault(e => e.Id == ruleItem.ReferencedItemId.Value);
if (eventEntity != null)
ruleItem.ReferencedItemValue = eventEntity.Title;
}
Upvotes: 0
Views: 101
Reputation: 514
Start to dig from this function
private void FillRuleItem(RuleItemResource ruleItem)
It seems like this exspressiion
var eventEntity = uow.Context.Events.FirstOrDefault(e => e.Id == ruleItem.ReferencedItemId.Value);
is null.
Upvotes: 1
Reputation: 101681
try this one:
rules.ForEach(showRule =>
{
var item = showRule;
var showRuleResource = ToShowRuleResource(item);
FillReferenceValue(showRuleResource);
builder.LogDelete(item, showRuleResource.ToAuditLog(), "Logic Rule");
});
Upvotes: 1