As I’ve mentioned in a couple other questions, I’m currently trying to replace a home-grown ORM with the Entity Framework, now that our database can support it.
Currently, we have certain objects set up such that they are mapped to a table in our internal database and a table in the database that runs our website (which is not even in the same state, let alone on the same server). So, for example:
Part p = new Part(12345);
p.Name = "Renamed part";
p.Update();
will update both the internal and the web databases simultaneously to reflect that the part with ID 12345 is now named “Renamed part”. This logic only needs to go one direction (internal -> web) for the time being. We access the web database through a LINQ-to-SQL DBML and its objects.
I think my question has two parts, although it’s possible I’m not asking the right question in the first place.
- Is there any kind of “OnUpdate()” event/method that I can use to trigger validation of “Should this be pushed to the web?” and then do the pushing? If there isn’t anything by default, is there any other way I can insert logic between
.SaveChanges()and when it hits the database? - Is there any way that I can specify for each object which DBML object it maps to, and for each EF auto-generated property which property on the L2S object to map to? The names often match up, but not always so I can’t rely on that. Alternatively, can I modify the L2S objects in a generic way so that they can populate themselves from the EF object?
This is the solution I ended up going with. Note that the implementation of
IAdvantageWebTableis inherited from the existing base class, so nothing special needed to be done for EF-based classes, once the T4 template was modified to inherit correctly.