internal T Key <T>(IAddition <IPrimaryKey <T> > keyedAddition) { var a = (Add)keyedAddition; if (!a.IsExecuted) { throw new TectureOrmAspectException($"Cannot obtain primary key: addition of '{a.Entity}' did not happen yet"); } string explanation = $"Get primary key of added {a.EntityType.Name}"; var p = Aux.Promise <T>(); if (p is Containing <T> c) { return(c.Get($"ORM_AdditionPK_{a.Order}", explanation)); } var result = (T)(GetKey(a, GetKeyProperties <T>(a)).First()); if (p is Demanding <T> d) { d.Fullfill(result, $"ORM_AdditionPK_{a.Order}", explanation); } return(result); }