content
| - %VOSWARNING%
%META:TOPICPARENT{name="VirtSybaseEntityFrameworkUsage"}%
---+++Manually creating EDM Associations (FKs) for the Sybase pubs2 database
The following steps will detail what is required to manually create *Associations* in your Entity Data Model.
You will need to determine where these associations exist and the multiplicity (one to one, one to many, etc) before commencing with the following steps.
NOTE: These steps will need to be repeated for each association.
1 The first Association I will deal with is the relationship between *publishers* and *titles* identified by the presence of the scalar property <b>pub_id</b> being present in both entities.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs01.png" style="wikiautogen"/>%BR%%BR%
This is a one to many relationship insomuch that publishers may have zero or many titles.%BR%%BR%
1 To add the Association, right click on *publishers* entity. Then, click *Add* -> *Association*.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs02.png" style="wikiautogen"/>%BR%%BR%
1 You will now see the *Add Association* dialog.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs03.png" style="wikiautogen"/>%BR%%BR%
1 For this association, the only thing that needs changing is the name of the <b>Navigation Property</b>. Change it from <b>publishers</b> to <b>publisher</b> on the <b>publishers</b> end of the association.%BR%%BR%This more correctly reflects the multiplicity of the association such that a publisher is associated with zero or many titles (plural).%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs04.png" style="wikiautogen"/>%BR%%BR%
1 Hit *OK*. The diagram will be refreshed to include the newly created association.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs05.png" style="wikiautogen"/>%BR%%BR%
1 You now need to edit the mappings associated with the newly created association. Highlight the association on the diagram. Then, right click it and select <b>Table Mapping</b>. This will display the <b>Mapping Details</b> pane.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs06.png" style="wikiautogen"/>%BR%%BR%
1 Click that line that states <Add a Table or View> to reveal a drop down list of all entities.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs07.png" style="wikiautogen"/>%BR%%BR%
1 Here, you need to select the entity on the right/far side of the association (the entity where the foreign key exists).%BR%%BR%In this example, it is the *titles* entity.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs08.png" style="wikiautogen"/>%BR%%BR%
1 The *Mapping Details* pane now refreshes to display both ends of the association. Now, you must provide relevant target store data types in the *Column* column for the key fields.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs09.png" style="wikiautogen"/>%BR%%BR%
1 Once the mapping is complete, you can now build the project using *Build* -> *Build Solution*.
%BR%%BR%<img src="%ATTACHURLPATH%/SybaseEDMFKs10.png" style="wikiautogen"/>%BR%%BR%
1 This should result in the following error which is included here, since I (the author) found it misleading.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs11.png" style="wikiautogen"/>%BR%%BR%
It seems that this error is attempting to say that there are two mappings which map to the same target source column.%BR%%BR%In this case, it is the target column <b>titles.pub_id</b>.%BR%%BR%That is, the scalar property <b>pub_id</b> and the Navigation Property *publishers* in the Invoice entity, both map to the Sybase table column <b>titles.pub_id</b> - which is not supported.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs12.png" style="wikiautogen"/>%BR%%BR%
1 The solution is simple!%BR%%BR%Delete the scalar property <b>titles.pub_id</b>. Its only purpose is to hold data representing a relationship/association (it is a Foreign Key), which has already been represented by the newly created association and resulting Navigation Property *publishers*.%BR%%BR%
Right click on <b>titles.pub_id</b> then *Delete*.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs13.png" style="wikiautogen"/>%BR%%BR%
1 The model diagram will refresh to reflect this change.%BR%%BR%
%BR%%BR%<img src="%ATTACHURLPATH%/SybaseEDMFKs14.png" style="wikiautogen"/>%BR%%BR%
1 Build the project again, using *Build* -> *Build Solution*.%BR%%BR%
<img src="%ATTACHURLPATH%/SybaseEDMFKs15.png" style="wikiautogen"/>%BR%%BR%
1 The project should now build fine.
%BR%%BR%<img src="%ATTACHURLPATH%/SybaseEDMFKs16.png" style="wikiautogen"/>%BR%%BR%
You will need to repeat these steps for each association, until you have a completed Entity Data Model like this -
%BR%%BR%<img src="%ATTACHURLPATH%/SybaseEDMFKs17.png" style="wikiautogen"/>%BR%%BR%
NOTE: It is worthwhile building after each association, since the error messages can be a little confusing.
|