Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu MEZIL

I love .Net

Abonnements

Actualités

Locations of visitors to this page
EDM => pérennité

Imaginons le cas suivant :

une table Employees définit comme suit :

CREATE TABLE [dbo].[Employees](
 [EmployeeID] [uniqueidentifier] NOT NULL,
 [LastName] [nvarchar](20) NOT NULL,
 [FirstName] [nvarchar](10) NOT NULL,
 [Out] [bit] NULL,
 CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
 [EmployeeID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

une entité en mapping 1-1 avec la table.

 

Maintenant, imaginons que le DBA décide de scinder la table Employees en 2 : une table EmployeesInActivity et une table OutEmployees (définies avec la même structure qu'Employees sans la colonne Out).

Ceci pourrait entrainer de grosses modifications dans le code mais grâce à EDM, il va être possible de réduire considérablement l'impact de cette modif.

Premièrement, il va falloir modifier la partie description de la base (ssdl) en supprimant l'ancienne table et en ajoutant les deux nouvelles.

Ensuite, il va juste falloir modifier le mapping (msl). Voici à quoi ressemblerait alors le msl :

<EntitySetMapping Name="EmployeesSet">

  <EntityTypeMapping TypeName="IsTypeOf(TestModel.Employees)">

    <MappingFragment StoreEntitySet="EmployeesInActivity">

      <Condition Name="Out" Value="false"/>

      <ScalarProperty Name="FirstName" ColumnName="FirstName" />

      <ScalarProperty Name="LastName" ColumnName="LastName" />

      <ScalarProperty Name="EmployeeID" ColumnName="EmployeeID" />

    </MappingFragment>

    <MappingFragment StoreEntitySet="OutEmployees">

      <Condition Name="Out" Value="true"/>

      <ScalarProperty Name="FirstName" ColumnName="FirstName" />

      <ScalarProperty Name="LastName" ColumnName="LastName" />

      <ScalarProperty Name="EmployeeID" ColumnName="EmployeeID" />

    </MappingFragment>

  </EntityTypeMapping>

</EntitySetMapping>

 

Ce qui est particulièrement intéressant c'est qu'on va garder la propriété Out sur l'entité et que cette propriété sera correctement renseignée alors qu'il n'y a plus de colonne Out en base, Out sera maintenant évalué via la table de provenance (EmployeesInActivity ou OutEmployees).

 

Maintenant, plus fort encore. Que va-t-il se passer quand on va sauver le contexte après avoir passé la propriété Out d'un employé de false à true ?

 

exec sp_executesql N'insert [dbo].[ OutEmployee]([EmployeeID], [LastName], [FirstName
values (@0, @1, @2)
',N'@0 uniqueidentifier,@1 nvarchar(1),@2 nvarchar(1)',@0='EA85CF90-6065-4548-BA87-61845B32FD44',@1=N'A',@2=N'a'

exec sp_executesql N'delete [dbo].[ EmployeesInActivity]
where ([EmployeeID] = @0)
',N'@0 uniqueidentifier',@0='EA85CF90-6065-4548-BA87-61845B32FD44'

 

Et oui, ce cas marche aussi.

 

Ainsi, la modif du DBA n'aura aucun impact sur votre code, juste un impact minime sur votre modèle. En comparaison des modifications que cela aurait pu entrainer auxquels il fait rajouter le fait de retester l'application, l'intérêt d'EDM est indéniable.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié lundi 17 mars 2008 01:45 par Matthieu MEZIL

Classé sous : , , ,

Commentaires

# re: EDM => pérennité @ lundi 17 mars 2008 18:56

Effectivement, mais une question : gere t il la transaction qui va bien autour des 2 insert ?

D autre part, le DBA sait deja limiter l'impact d une telle modif en creant une vue et des triggers sur cette vue, on imite ainsi l ancienne table

christian

# re: EDM => pérennité @ lundi 17 mars 2008 23:02

Salut Christian.

Pour la transaction, oui.

Pour la vue, je ne suis qu'à moitié d'accord avec toi car on ne peut pas faire une opération de type CUD sur une vue (à moins que se ne soit pour ça que tu crées des triggers sur ta vue).

(Et oui, je ne suis pas DBA ;-))

Matthieu MEZIL

# re: EDM => pérennité @ lundi 17 mars 2008 23:33

Oui c est justement pour ca les triggers

christian

# re: EDM => pérennité @ mardi 18 mars 2008 10:07

Ok. Merci Christian.

Matthieu MEZIL

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Outil : Antix SMTP Server for Developers par CoqBlog le il y a 8 heures et 17 minutes

- L'Enterprise Library 4.0 est disponible en release par Playtime le il y a 8 heures et 49 minutes

- Silverlight 2b1 Tips : Comment réaliser une TextBox multiligne par Les technologies RIA le il y a 19 heures et 40 minutes

- Virtual PC 2007 SP1 et Virtual Server 2005 R2 SP1 mis à jour : support Windows Server 2008, Vista SP1 et XP SP3 par CoqBlog le 05-16-2008, 22:53

- HxD (éditeur hexa freeware) mis à jour par CoqBlog le 05-16-2008, 22:00

- [ASP.NET]FileUpload et UpdatePanel par Team Itelios - Clément, Xavier, Guillaume, Stéphan le 05-16-2008, 17:16

- SharePoint : Installer le composant de Lookup en Cascade sur WSS V3 par Blog Technique de Romelard Fabrice le 05-16-2008, 13:29

- WygDay 2008, Session Silverlight 2 & Expression 2 par Les technologies RIA le 05-16-2008, 10:06

- EDM: ComplexType an error for a warning? par Matthieu MEZIL le 05-16-2008, 01:15

- Entity cloner par Matthieu MEZIL le 05-16-2008, 00:17