~~I just noticed something. I forgot something to implement which is important: when a PK is synced with the FK, the FK field gets the PK value. Of course, the PK isn't a nullable type. But the FK might be. So instead of getting a value of type X, the FK gets the value of type Y, the same as the PK field. Reading the property of the FK field might create a cast exception, as the property expects a value of type X, not Y.
I have to push the value of the PK through the converter as well, if available, to get a value of type X. ~~
Can't be done, type converter is part of the persistence info, not part of the entity field core. So in adapter, the typeconverter isn't known on the field (rightfully so, as it can have multiple converters, one per db specific project). So a PK type has to be castable to the FK type at runtime. If not, too bad. This isn't a problem per se, just for VB.NET 1.x users, which can't utilize implicit conversion functions on a type....
This also causes a problem with the custom relation creation dialog. A custom relation has to be able to be creatable between a PK field of type Int, and an FK field of type Nullable<Int> or whatever type based on Int.