find a location for property in a new city

Thursday, 17 June 2010

Update minor change to database in your Entity Data Model

I added a new column to a table in the database and couldn't seem to get these changes reflected in my Entity Data Model using Entity Framework 4. There is a function I can use in the context menu called "Update Model from Database..." but that seems overkill. I just want one new column mapped in my entity data model.

I didn't want to use the 'Update Model from Database' since it will update every table and view in my model, reverting all the entity and property names to the database naming convention and breaking all my referencing code. Too much pain for what should be quite a simple change? Yes, I think so.

Solution

As an example let's say you have added a varchar(50) column called MyDbColumn to MyDbTable that currently has an entity modelled called MyEntity that hasn't recognised this column which you want to be called MyProperty.

Let's also say you have added MyProperty of type String with MaxLength set to 50 to your MyEntity entity. If not, do that. Now the tough bit: Mapping it to the database without a full update.

Time to leave the comfort of the UI.
  1. Right click your edmx file in the Solution Explorer
  2. Select 'Open With...'
  3. Select 'XML (Text) Editor' and click OK (you may be asked to close any open instances of the edmx file)
  4. Search for where is says <EntityType Name="MyDbTable">
  5. Add the property <Property Name="MyDbColumn" Type="varchar" MaxLength="50" />
  6. Search for <EntitySetMapping Name="MyEntity">
  7. You can find all your other mapped properties within a 'MappingFragment' element.
  8. Add your new mapped column <ScalarProperty Name="MyPropertyName" ColumnName="MyDbColumnName"/>
  9. Save & Build

If you now re-open your edmx file in the designer and take a look at the Mapping Details for MyEntity you will see that MyProperty is mapped to MyDbColumn in MyDbTable. Lovely stuff!

Follow britishdev on Twitter

8 comments:

  1. Thanks a lot . very useful

    ReplyDelete
  2. Nice post, really helped me. keep up the good work.

    ReplyDelete
  3. Thank you so much, it saved ton of effort!

    ReplyDelete
  4. thank you sir, such a simple thing that Microsoft forgot.

    ReplyDelete
  5. I'm keen a put up. It happens to be fantastic to ascertain most people verbalize out of your spirit not to mention ability on that fundamental topic area are generally comfortably found. ideas viewpoint online site.
    deluxe over table

    ReplyDelete
  6. what am I missing?
    I followed these instructions (in fact, tried 3 times). I get an error:

    running transformation: Content not valid. The conceptual side Member or Property 'myfield' specified as part of this MSL does not exist in MetadataWorkspace.

    ReplyDelete
    Replies
    1. After you do this, open the EDMX in the designer and manually add each property:
      1. Find the table entity in the EDMX diagram
      2. Right-click on the entity and choose Add New -> Scalar property (or other type of property)
      3. Right-click on the newly added property and choose Properties
      4. As needed, you can change the Name, Nullable, Type, etc.

      Delete
  7. In addition, they are durable, with an average lifespan of up to seven times that of most magnetic data storage devices, making them ideal for storing permanent data such as photographs and music. Self Storage

    ReplyDelete