in

DĂ© specialist in .NET trainingen en consultancy

Jo-wen Mei

juli 2008 - Posts

  • EF: update model from database

    Het is heel mooi dat je mbv het Entity Framework (EF) een conceptueel datamodel kan genereren. Maar een belangrijk issue wat speelt bij code generatie is hoe er wordt omgegaan met het updaten van wijzigingen.

    Nu had ik reeds een datamodel genereerd, toen ik erachter kwam dat het type van een bepaalde kolom niet correct was.

    Deze aangepast in de database, en toen in de datamodel designer gekozen voor de optie "Update model from database".

    Vervolgens kun je in de wizard die verschijnt aangeven of je entiteiten wilt toevoegen, vernieuwen of verwijderen. Ik koos voor vernieuwen.

    Daarna kon ik niet meer builden...

    De kolom die ik had gewijzigd had verscheen als een nieuwe property in het conceptueel model, ipv dat de reeds bestaande werd gewijzigd. Deze moest ik dus handmatig verwijderen. (wees hier voorzichtig, want als de designer er niet meer uit komt moet je in de xml file gaan hacken, wat erg foutgevoelig is)

    andere punten waar je rekening mee moet houden na (re)generatie:

    - entities en entity sets (containers) krijgen dezelfde enkelvoudige naam. Dit is erg verwarrend en daarom geef ik alle entity sets een meervoudige naam. (bij Linq2Sql gebeurt dit automagisch)

    -  let goed op dat de namespace nog hetzelfde is! (zeker als je een punt in je projectnaam hebt zitten, zoals Oosterkamp.Domain)

    meer info over "update model from database"
  • Bug in Entity Framework (metadata=res://*/ )

    ok, de titel is een beetje vaag, maar de bug komt alleen voor in een specifiek scenario (wat ik niet in een zin kan omschrijven)

    Ik heb een class library met een DataModel en andere domeinlogica erin. Nu wil ik vanuit een apart testproject testjes schrijven die gebruik maken van de entiteiten in de domein-assembly.

    Nu moet ik sowieso de juiste connectionString opslaan in de app.config file van het testproject....

    maar dan krijg ik nog de foutmelding: "System.Data.MetadataException: Unable to load the specified metadata resource.."

    het testproject zoekt namelijk naar de *.csdl, *ssdl, *.msl bestanden, die als resource in de DataModel zitten ge-embed. Normaliter doorzoekt het alle assemblies die gereferenced zijn, BEHALVE als een unmanaged applicatie de managed dll laad.... wat dus het geval is als je het testframework van visual studio gebruikt! *zucht*

     

    de oplossing is in ieder geval simpel: 

    maak van 

    <add name="OosterkampEntities" connectionString="metadata=res://*/Models.Oosterkamp.csdl|res://*/Models.Oosterkamp.ssdl|res://*/Models.Oosterkamp.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=Oosterkamp;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

    dit

    <add  name="OosterkampEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=Oosterkamp;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

    De harde verwijzingen naar de resource bestanden zijn eruit.

     

    meer info