Hi,
I really like idea Abp implementation of certain concepts like IMustHaveTenant. I'm trying to implement something similar. I have created IMustHaveSourceAccount interface and I want to implement logic that will always validate if entity that implements IMustHaveSourceAccount has SourceAccountId property set.
What I got so far is:
protected override void ApplyAbpConcepts()
{
//Apply our concepts first
ApplyOrdersConnectorConcepts();
base.ApplyAbpConcepts();
}
protected virtual void ApplyOrdersConnectorConcepts()
{
var entries = ChangeTracker.Entries().ToList();
foreach (var entry in entries)
{
switch (entry.State)
{
case EntityState.Added:
CheckMustHaveSourceAccountIdProperty(entry);
break;
}
}
}
protected virtual void CheckMustHaveSourceAccountIdProperty(object entityAsObj)
{
if (!(entityAsObj is IMustHaveSourceAccount))
{
return;
}
var entity = entityAsObj.As<IMustHaveSourceAccount>();
if (entity.SourceAccountId == 0)
{
throw new AbpException("Can not set SourceAccountId to 0 for IMustHaveSourceAccount entities!");
}
}
My debugging indicates that there is problem when checking if entity is derived from IMustHaveSourceAccount. I got migrations code with seed data that is inserting few records including entities that derive from IMustHaveSourceAccount and deliberately set SourceAccountId = 0 which should throw exception.
Even when I changed method to throw exception if entity implements my interface nothing happens: protected virtual void CheckMustHaveSourceAccountIdProperty(object entityAsObj) { if (!(entityAsObj is IMustHaveSourceAccount)) { return; } throw new AbpException("Can not set SourceAccountId to 0 for IMustHaveSourceAccount entities!"); }
Throwing exception before If block works so my method is getting called. Do you know what I'm doing wrong?
Thank you
1 Answer(s)
-
0
Hi,
I found where the problem was, which was very silly btw.
I was passing EntityEntry object instead of actual entity. CheckMustHaveSourceAccountIdProperty(entry);
Should be like this CheckMustHaveSourceAccountIdProperty(entry.Entity);