✅ HashSet property with List backing field
Posting here instead of in #database because it's not really related to db-specific stuff.
For reasons described vaguely here: https://github.com/npgsql/efcore.pg/issues/2301, I am looking to implement a
HashSet<T>
property with a List<T>
backing field which updates appropriately as I add and remove objects from the publicly exposed HashSet<T>
.
example class:
I want the underlying list field to be updated every time I modify the public property. Is there a way to accomplish this without any of the following?
- never calling Add/Remove/etc methods and instead manually re-assigning the BlacklistedHighlightUsers
every time
- implementing my own wrapper class which overrides the Add/Remove/etc methods to somehow write to this underlying list
- giving up on doing this in the first place and using a public List<T>
and tossing on .ToHashSet().ToList()
or .Distinct().ToList()
everywhere I go
all are what I'd consider ugly, hacky solutions that I'm not a fan of as they either mean I am overcomplicating things or there really just is not a solution3 Replies
whats the point of the list backing field?
you can only specify an "array" value converter if your property type is
List<T>
or T[]
. Any other property type will either a) not show the extension method due to constraints, or b) if you force the type conversion manually a error is produced at migration generation time. You can't (by default, at least) specify enumerable value conversions, as using HasPostgresArrayConversion
is heavily encouraged instead.
I may have found a solution to my problem accidentally while scrolling just a tiny bit further in their issues tab on GitHub searching for HasPostgresArrayConversion
, which happens to be someone trying to do the exact same thing as me: https://github.com/npgsql/efcore.pg/issues/1927
so this may be a non issue lolClosed!