You can change visibility of entity classes and properties in the EDM Designer but special rules apply for models used in Silverlight.
The generated Entity Data Model (EDM) classes and their members are Public by default.
That isn't always a good idea. Some classes shouldn't be changed or constructed. Some properties should be read-only.
You can change the visibility of a class or property in the EDM Designer. Locate the object in the Model Browser, open its Properties window, and find the "Code Generation" category. Entity and property options differ:
Entity visibility |
---|
Property getter and setter visibility |
---|
You have four visibility choices: Public, Internal, Protected, or Private. You can pick any of them if you don't intend to use the model in Silverlight.
In Silverlight your only viable options are Public and Internal.
Silverlight prohibits non-public reflection. Silverlight won't let DevForce reflect for Protected and Private types which means DevForce won't be able to get and set entity data while communicating with the server during queries and saves.
Pick Internal if you want to hide an entity or property in a model that you will use in Silverlight.
Follow the same rule when writing an entity's default constructor.
Silverlight prevents outside assemblies from accessing internal members, but it makes an exception when the assembly's internals are made visible using the InternalsVisibleTo attribute.
DevForce automatically adds the following to the AssemblyInfo file when the code for a database-first model is generated:
C# | // Allows the expression tree built by DevForce for certain complex queries to be processed correctly. [assembly: InternalsVisibleTo("System.Core, PublicKey=00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb77e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c123b37ab")] // Allows internal data members to be serialized. [assembly: InternalsVisibleTo("System.Runtime.Serialization, PublicKey=00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb77e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c123b37ab")] |
DevForce adds these lines to the project's AssemblyInfo automatically when you first generate your entity model. You may have to add them manually if you moved the model to a different model project.
As of version 7.2.0, you also need to grant "friend" access to IdeaBlade.Core.SL to allow DevForce to clone your entities with internal members.
C# | [assembly: InternalsVisibleTo("IdeaBlade.Core.SL, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b3f302890eb5281a7ab39b936ad9e0eded7c4a41abb440bead71ff5a31d51e865606b2a7e6d0b9dd0d92b113b9d10fb13f01fb5d856e99c1e61777cf4772d29bad7e66ffb93fc5cbd63b395046c06ff57db6ecbeee4bdd6effc405878d65cfc4911708ed650da935d733fc5dc707f74910e025ac080543e01a6cc863b9f85ffc")] |