开发者

Reflecting changes made to stored procedure in Entity Framework-generated complex type

So I've got a DB in SQL Server that I'm connecting to and using Entity Framework 4.1 to generate my POCO classes, which works generally pretty well. There are also stored procedures that I am using the 'function import' feature to create retrieve the resulting rows of data from calling them. Essentially the process I'm using is to:

  1. Right-click on the Model.edmx and choose "Function Import..."
  2. Pick the procedure from the dropdown
  3. Enter my desired Function Import Name
  4. Click "Get Column Information"
  5. Click "Create New Complex Type"
  6. Click "OK"

and that will create a POCO class for the result set definition and I can do something like:

var query = context.GetMyStuff().AsQueryable();

to retrieve the results. This seems to work just fine.

Now the trouble I'm having is when I try to modify a stored procedure and then get the changes to propagate to my code. For instance, I added an additional column to a table and then updated the stored procedure to return that column data as part of the results. I don't see how to make that update propagate into the function import stuff, i.e., get the generated POCO to have a new property for that added column.

What's the drill to make that update to the procedure reflect back in C# side? Am I going to have to make a new class each time? Wasn't obvious to me how to do this.


Additional Info:

When I've tried to "Update" the Complex type, as suggested in the response by Ladislav to this question, I get an error message "Verify that the FunctionImp开发者_开发知识库ort name is unique."

If I try what E.J. Brennan suggests below, I get the same error message.

What does work, at least for me, is to open the Model.edmx file in Notepad++, find the FunctionImport line and delete it then regenerate it. That's not ideal, but it worked.


(This solution is for EF 6. I have not tried in other EF versions. It works nice.) I am supporting Brennan's answer by illustrating an example to make it more clear to naive coders like me :)


Go to Model browser. MyStoreProc is the name of the stored procedure (as an example). MyStoreProc will appear in 3 places.

  1. 1st place- Under Complex Types-> as MyStoreProc_result
  2. 2nd Place- Under Function Imports -> as MyStoreProc
  3. 3rd Place - Under Stored Procdures/ Functions -> as MyStoreProc

    Reflecting changes made to stored procedure in Entity Framework-generated complex type

Delete all three from model. Save the edmx (by clicking in the window then ctrl+S). Then right click and click update the model from database. Then add the updated stored procedure and Save again.

Solved without any hassle :)


I usually go into the model browser, In main menu select View > Other Windows > Entity Data Model Browser (it usually opens in the same panel as Solution explorer), and delete the stored procedure that has changed, and re-add it back in.

There may be an easier, but this one works for me.

Edit: "Update model from database" theoretically should also work, but in my experience, it doesn't work 100% of the time, deleting and re-adding seems rock solid.


At our company we used to update the SP's like SArifin answer...which works but is kind of a drag.

Recently we found out that you only have to go to that SP Function Import -> Right Click -> Edit -> Update the complex type.


@itsmatt - your solution worked for me. In short,

  1. Open file .edmx in a text editor.
  2. Locate and delete the XML node that looks like:
<FunctionImport Name="<some name>" ReturnType="Collection(dev_riskModel.GetECLExcesses_Result)">
(additional lines. . .)
</FunctionImport>
  1. Save the file
  2. In the model browser, update the model from the database, re-adding the stored proc
  3. Select the newly added stored proc, then select the "Add Function Import" item from the context menu, etc.


I just faced this same issue and thank you for your answer! One more thing I had to do was to delete the output from the "Complex Types" in the model browser.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜