Momenteel zit ik met een probleem dat de metadata van m'n EF4.0 niet beschikbaar is in m'n WCF-service, waardoor er niet succesvol een connectie kan worden opgezet. De connectiestring wordt niet geaccepteerd.
Eerst maar wat achtergrondinformatie.
Momenteel ben ik bezig met het maken van een website, hierbij wil ik de presentatielaag en 'de rest' scheiden in 2 tiers. De communicatie tussen de 2 lagen geschied door middel van een WCF-service. Tot nu toe niet heel spannend.
In de niet-presentatie-tier heb ik meerdere layers, de basis bestaat uit een WCF-service, BLL en DAL. De BLL en DAL zijn 2 losstaande class libraries. De service, BLL en DAL zijn gekoppeld door references.
Ook heb ik nog een 2-tal projecten (ook class libraries) die zorgen voor de werking van de EF objecten. Hier heb ik onder andere de walkthrough van deze link gebruikt: http://blogs.msdn.com/ado...the-entity-framework.aspx
Ik heb dus nog een project met het Model en een project met de Entities.
In de DAL heb ik een reference gemaakt naar zowel de Entities als het Model
In de BLL en service heb ik alleen een reference gemaakt naar de Entities. Zo heb ik afgedwongen dat er alleen in de DAL naar de database kan worden weggeschreven.
Inmiddels heb ik de code van enkele methoden geschreven in alle lagen van de applicatie en wilde ik testen of het geheel ook ging werken.
Het eerste probleem dat ik had was de fout:
In de DAL was een app.config aangemaakt met de juiste connectiestring. Ik had gehoopt dat deze app.config wel zou worden gekopieerd naar de bin van de service en dat de connectiestring daaruit zou worden gebruikt. Iets dergelijks heb ik namelijk een keer bij een andere applicatie gezien en had gehoopt dat het op deze manier zou werken. Geeft natuurlijk niets, aangezien het snel is op te lossen door de connectiestring te kopieren naar de web.config van de service.
Nu liep ik tegen een andere fout aan, namelijk:
1 methode stelt dat je de 'Metadata Artifact Processing' op Copy to 'Output Directory' moet zetten. Daarna de gegenereerde bestanden (3) moet kopieren naar de root van je applicatie en de connectiestring hierop aan moet passen.
Dit heb ik geprobeerd, maar werkte niet. In mijn geval kreeg ik eerst de melding dat de connectiestring fout was. Na wat tweaken had ik hem werkend, maar kreeg ik de melding dat de metadata weer niet gevonden kon worden.
De 2e oplossing is om de connectiestring aan te passen.
Je moet dan de res://*/...... aanpassen in res://AssemblyNameWhereTheEDMXIsLocated/....
Dit heb ik ook geprobeerd en dat werkt! Zoals in de walkthrough is te zien, staat het edmx-bestand in het Model project. Nadat ik het *-teken had vervangen door de naam van het Model project (naam van de dll) werkte de connectie naar de database. Echter, ik zou hier niet posten als er nog iets mis zou zijn.
Standaard wordt de Model dll niet in de bin-directory geplaatst bij een build. Bij het builden van de DAL komt de Model dll wel in de bin van de DAL. Nu kan ik een post-build scriptje maken dat de dll in de bin plaatst, maar waarschijnlijk doe ik iets verkeerd of zie ik wat over het hoofd. Dit lijkt me namelijk iets dat 'standaard' zou moeten werken.
In de vele voorbeelden op het internet maken ze ook n-tier applicaties, maar daar is de WCF-service ook gelijk de DAL. In zo'n geval zal alles inderdaad prima werken, aangezien je dan ook de Model tot je beschikking hebt.
Waarschijnlijk wordt dit ook opgelost door in de service een reference te maken naar het Model project, maar dat wil ik dus niet. Dan kun je in theorie namelijk gelijk in de service naar de database.
Waarschijnlijk ben ik niet de enige met dit 'probleem'. Tijdens het zoeken kwam ik eigenlijk alleen maar op sites uit waar ze de bovenste 2 oplossingen bieden. Echter is dat voor mij niet van toepassing.
Mocht het toch zo zijn dat ik hier iets heel raars aan het doen ben (en dus toch de enige ben met dit probleem), mag er ook een alternatief worden voorgesteld hoewel ik het vermoeden heb dat ik hier toch wel goed bezig ben.....
Eerst maar wat achtergrondinformatie.
Momenteel ben ik bezig met het maken van een website, hierbij wil ik de presentatielaag en 'de rest' scheiden in 2 tiers. De communicatie tussen de 2 lagen geschied door middel van een WCF-service. Tot nu toe niet heel spannend.
In de niet-presentatie-tier heb ik meerdere layers, de basis bestaat uit een WCF-service, BLL en DAL. De BLL en DAL zijn 2 losstaande class libraries. De service, BLL en DAL zijn gekoppeld door references.
Ook heb ik nog een 2-tal projecten (ook class libraries) die zorgen voor de werking van de EF objecten. Hier heb ik onder andere de walkthrough van deze link gebruikt: http://blogs.msdn.com/ado...the-entity-framework.aspx
Ik heb dus nog een project met het Model en een project met de Entities.
In de DAL heb ik een reference gemaakt naar zowel de Entities als het Model
In de BLL en service heb ik alleen een reference gemaakt naar de Entities. Zo heb ik afgedwongen dat er alleen in de DAL naar de database kan worden weggeschreven.
Inmiddels heb ik de code van enkele methoden geschreven in alle lagen van de applicatie en wilde ik testen of het geheel ook ging werken.
Het eerste probleem dat ik had was de fout:
Door op deze fout te zoeken kwam ik er al vrij snel achter dat ik de connectiestring nog in m'n WCF-service moest definieren. Op zich wel logisch natuurlijk.The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
In de DAL was een app.config aangemaakt met de juiste connectiestring. Ik had gehoopt dat deze app.config wel zou worden gekopieerd naar de bin van de service en dat de connectiestring daaruit zou worden gebruikt. Iets dergelijks heb ik namelijk een keer bij een andere applicatie gezien en had gehoopt dat het op deze manier zou werken. Geeft natuurlijk niets, aangezien het snel is op te lossen door de connectiestring te kopieren naar de web.config van de service.
Nu liep ik tegen een andere fout aan, namelijk:
Als je op deze fout zoekt krijg je honderden resultaten met eigenlijk 2 verschillende oplossingen.Unable to load the specified metadata resource.
1 methode stelt dat je de 'Metadata Artifact Processing' op Copy to 'Output Directory' moet zetten. Daarna de gegenereerde bestanden (3) moet kopieren naar de root van je applicatie en de connectiestring hierop aan moet passen.
Dit heb ik geprobeerd, maar werkte niet. In mijn geval kreeg ik eerst de melding dat de connectiestring fout was. Na wat tweaken had ik hem werkend, maar kreeg ik de melding dat de metadata weer niet gevonden kon worden.
De 2e oplossing is om de connectiestring aan te passen.
Je moet dan de res://*/...... aanpassen in res://AssemblyNameWhereTheEDMXIsLocated/....
Dit heb ik ook geprobeerd en dat werkt! Zoals in de walkthrough is te zien, staat het edmx-bestand in het Model project. Nadat ik het *-teken had vervangen door de naam van het Model project (naam van de dll) werkte de connectie naar de database. Echter, ik zou hier niet posten als er nog iets mis zou zijn.
Standaard wordt de Model dll niet in de bin-directory geplaatst bij een build. Bij het builden van de DAL komt de Model dll wel in de bin van de DAL. Nu kan ik een post-build scriptje maken dat de dll in de bin plaatst, maar waarschijnlijk doe ik iets verkeerd of zie ik wat over het hoofd. Dit lijkt me namelijk iets dat 'standaard' zou moeten werken.
In de vele voorbeelden op het internet maken ze ook n-tier applicaties, maar daar is de WCF-service ook gelijk de DAL. In zo'n geval zal alles inderdaad prima werken, aangezien je dan ook de Model tot je beschikking hebt.
Waarschijnlijk wordt dit ook opgelost door in de service een reference te maken naar het Model project, maar dat wil ik dus niet. Dan kun je in theorie namelijk gelijk in de service naar de database.
Waarschijnlijk ben ik niet de enige met dit 'probleem'. Tijdens het zoeken kwam ik eigenlijk alleen maar op sites uit waar ze de bovenste 2 oplossingen bieden. Echter is dat voor mij niet van toepassing.
Mocht het toch zo zijn dat ik hier iets heel raars aan het doen ben (en dus toch de enige ben met dit probleem), mag er ook een alternatief worden voorgesteld hoewel ik het vermoeden heb dat ik hier toch wel goed bezig ben.....
Battle.net - Jandev#2601 / XBOX: VriesDeJ