Hello,
Let me say upfront that databases are not my area of expertise, so I may be
saying something that is obviously wrong at first glance. (Apologies for
wasting your time if this will turn out to be the case.) Secondly, this
behaviour seems to be related to development a little more than users, thus
posting here.
*The Problem*
SimpleModelInspector does not recognise collections of simple values
(example below) as one-to-many, while in my view such dependent collections
should automatically be marked as such (as well as inverse). At first I
thought that this was a glitch and aimed to write a test that would
demonstrate it; however, to my surprise there are already tests proving *the
opposite* behaviour!
The tests in question are WhenCollectionOfComponentsThenNoMatch and
WhenCollectionOfElementsThenNoMatch inside OneToManyTests. To my
(untrained) eye it seems they should be demonstrating that a collection of
components and a collection of elements *should* in fact be marked as
one-to-many (which it is currently not).
*Why?*
The particular use case in case you're wondering: having cascade-on-delete
enabled on collections inside auto-mapped classes:
public MyClass
{
public IList<string> Tags { get; set; }
}
public class MyModelMapper : ModelMapper
{
public MyModelMapper() : this(new SimpleModelInspector())
{
}
public MyModelMapper(IModelInspector modelInspector) : base(modelInspector)
{
BeforeMapList += CascadeDeleteForChildCollections;
}
private void CascadeDeleteForChildCollections(
IModelInspector inspector,
PropertyPath member,
ICollectionPropertiesMapper customizer)
{
if (inspector.IsOneToMany(member.LocalMember))
{
customizer.Inverse(true):
customizer.Key(k => k.OnDelete(OnDeleteAction.Cascade));
}
}
}
(I know it is not always the best+safest idea to casdade, but in this case
these are some utility tables, and not part of the core business domain.)
Please do let me know if I'm wrong and this in fact is not a classic
example of a one-to-many relationship, or if there perhaps exists another
way to detect such collections with a model inspector and/or have them
auto-SQL-cascade their deletes.
Best regards,
Dawid Ciecierski
--
---
You received this message because you are subscribed to the Google Groups
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.