Ne, nehádáte správně, není to generování zbytečně složitých dotazů, neefektivní hromadné úpravy a mazání dat, i když ano, to mě samozřejmě štve taky, ale dá se to řešit pohledy a uloženými procedurami na straně SQL Serveru.
Pokud si EDMX soubor otevřete a pozorně prohlédnete, narazíte tam na toto (pokud jedete proti velkému SQL Serveru):
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<edmx:Runtime>
<edmx:StorageModels>
<Schema Namespace="…" ProviderManifestToken="2008" Alias="Self" Provider="System.Data.SqlClient" …
Aplikaci vyvíjíme na SQL Serveru 2008, ale u zákazníka na produkčním serveru běží SQL Server 2005. Ten vyznačený atribut určuje, jestli se smí použít nové datové typy a vymoženosti ze SQL 2008, např. DATETIME2. Aplikace, kde je v EDMX toto, nepojede proti SQL Serveru 2005 a při nejbližší příležitosti spadne.
Můžete to upravit ručně na 2005, ale pokud během vývoje ve Visual Studiu dáme aktualizovat model podle databáze (naší, vývojové, na SQL Serveru 2008), tak se nám samozřejmě tento atribut vždy přepíše na 2008.
Dobré pravidlo zní – automatizujte vše, co automatizovat jde. Nerad bych na to před nějakým releasem zapomněl a nasadil na server nefunkční verzi, takže si pomůžeme Pre Build steps v projektu, který EDMX soubor obsahuje.
"$(SolutionDir)..\..\lib\_tools\Riganti.Utils.SetEdmxVersion.exe" "$(ProjectDir)DbModel.edmx" 2005
A aplikace, která se o toto postará, je zde – dávám jí k dispozici včetně zdrojáků pod licencí “dělejte si s tím co chcete, podporu poskytuji jen když se mi bude chtít”.