Entity Framework won't SaveChanges on new entity with two-level relationship

Posted by Tim Rourke on Stack Overflow See other posts from Stack Overflow or by Tim Rourke
Published on 2009-08-17T20:39:45Z Indexed on 2010/04/06 15:03 UTC
Read the original article Hit count: 700

I'm building an ASP.NET MVC site using the ADO.NET Entity Framework. I have an entity model that includes these entities, associated by foreign keys:

Report(ID, Date, Heading, Report_Type_ID, etc.)

  • SubReport(ID, ReportText, etc.) - one-to-one relationship with Report.
    • ReportSource(ID, Name, Description) - one-to-many relationship with Sub_Report.
      • ReportSourceType(ID, Name, Description) - one-to-many relationship with ReportSource.
      • Contact (ID, Name, Address, etc.) - one-to-one relationship with Report_Source.

There is a Create.aspx page for each type of SubReport. The post event method returns a new Sub_Report entity.

Before, in my post method, I followed this process:

  1. Set the properties for a new Report entity from the page's fields.
  2. Set the SubReport entity's specific properties from the page's fields.
  3. Set the SubReport entity's Report to the new Report entity created in 1.
  4. Given an ID provided by the page, look up the ReportSource and set the Sub_Report entity's ReportSource to the found entity.
  5. SaveChanges.

This workflow succeeded just fine for a couple of weeks. Then last week something changed and it doesn't work any more. Now instead of the save operation, I get this Exception:

UpdateException: "Entities in 'DIR2_5Entities.ReportSourceSet' 
participate in the 'FK_ReportSources_ReportSourceTypes' relationship. 
0 related 'ReportSourceTypes' were found. 1 'Report_Source_Types' is expected."

The debug visualizer shows the following:

  • The SubReport's ReportSource is set and loaded, and all of its properties are correct.
  • The Report_Source has a valid ReportSourceType entity attached.

In SQL Profiler the prepared SQL statement looks OK. Can anybody point me to what obvious thing I'm missing?

TIA

Notes: The Report and SubReport are always new entities in this case. The Report entity contains properties common to many types of reports and is used for generic queries. SubReports are specific reports with extra parameters varying by type. There is actually a different entity set for each type of SubReport, but this question applies to all of them, so I use SubReport as a simplified example.

© Stack Overflow or respective owner

Related posts about entity-framework

Related posts about savechanges