In m'n database maak ik gebruik van een idenity veld dat bestaat uit een Guid. Deze guid wordt automatisch gegenereerd binnen SQL Server door middel van de newsequentialid() functie (dit kan uiteraard ook met newid()). Dit betekend dus dat ik in m'n code niet een guid hoef aan te maken, omdat SQL dit al zelf doet. In de op te slaan entity vul ik het ID veld dus ook niet.

Nadat het insert commando is uitgevoerd verwachtte ik dat het ID veld zou worden gevuld met de nieuw aangemaakte guid, maar niets is minder waar. Het blijft een Guid.Empty (00000000-0000-0000-0000-000000000000). In het EF1.0 werkte dit inderdaad niet, daar was helemaal geen support voor Guid identity velden. Er was echter beloofd om dit wel op te lossen in het EF4.0. Na een kleine zoektocht kom ik op allerlei pagina's en sites die het hebben over EF1.0 en Linq-to-Sql, iets waar ik in het verleden ook al dit probleem heb gehad.

Met de ervaring die ik uit het verleden had, heb ik ook al even zelf zitten klikken en zag dat de StoreGeneratedPattern op None stond. Deze heb ik op Identity en op Computed gezet. Beide keren was dit niet de oplossing.

Uiteindelijk ben ik op een post van Lee Dumond uitgekomen: http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/

Hier loopt hij tegen hetzelfde probleem aan als mij.

Hij heeft hier de oplossing beschreven, namelijk dat je zelf, handmatig, de XML van het edmx-bestand moet aanpassen en dan bij het veld instellen dat dit een Identity veld is.

In de edmx:StorageModels moet je zelf bij het juiste veld aangeven dat deze automatisch wordt aangemaakt:

<edmx:StorageModels>

……

<EntityContainerName="ProjectModelStoreContainer">

<EntitySetName="Item"EntityType="ProjectModel.Store.Item"store:Type="Tables"Schema="dbo"/>

<EntitySetName="ItemType"EntityType="ProjectModel.Store.ItemType"store:Type="Tables"Schema="dbo"/>

……

Dit heeft als resultaat dat het veld in het model ook echt een Identity veld wordt. Normaal kun je dit namelijk niet aanpassen in de properties:

Wel blijft het raar dat dit niet automatisch goed wordt geregeld. Hopelijk wordt dit wel opgelost in een servicepack of EF5.0.

comments powered by Disqus