You did a great job!!!
I was using the old version for a while, and this new improvements help me a lot..

Thanks very much

"So then if I store the Injection element_key (in the case of an array), as a property in the ImageFile object which references the injection, I will be able to get to the various Injection properties from the ImageFile instance? "

Sure, just to pay attention to manage the array key, that will be like your ID

"What would I store in the ImageFile in the case of a list? "

You can use list like a collection, could be of %SerialObjects or other types like %Strings, in the table will be save like $Piece in the column

Sorry for delay...

You can use both, as a list you will use the insert method like a relationship

Set inj = ##class(PET.Injection).%New(), inj.Desc = "blabla "_i
Do study.Injection.Insert(inj)

It will add a column with the list

You can use an array, but you must use SetAt:

Do study.InjectionArr.SetAt(inj,i)

And it will create another table with the name of the property