Bonjour à tous,

Je me pose une question existentielle dans le cadre du démarrage d'un nouveau projet. Je suis débutant en Entity Framework (même si développeur depuis 20 ans, jusqu'à présent les projets existants tournent à l'ancienne avec des accès à la base codés "à la mano").

Sur ce nouveau projet, la base de données est amenée à évoluer fréquemment au fil du développement et des besoins. Et bien sûr l'appli .NET ne sera pas la seule utilisatrice de la base, hors de question de gérer la création/évolution de la base automatiquement depuis EF Code First.

Du coup, j'ai fait des tests, et j'en arrive aux problèmes suivants :

1) Database First :

D'un clic de souris le modèle est mis à jour pour coller à la base de données, ça semble parfait. Mais quand la table "user" possède deux clés étrangères vers la table "address" (BillingAddress et DeliveryAddress), EF me sort des propriétés de navigation "Address" et "Address1". Bien sûr, on peut le modifier dans l'EDMX, mais il y a de fortes chances que ce soit écrasé lors d'une synchro future (déjà eu le cas où j'ai dû supprimer une entité et la ré-inclure pour qu'elle soit à jour). Pas fiable. Quand il y aura 200 tables et 300 propriétés à renommer ça deviendra impossible à maintenir.

2) Code First from existing Database :

A la génération, ça fonctionne très bien. Puis on peut renommer les propriétés de navigation directement dans le code des objets, mais quand la DB évolue, soit on se tape tous les changements à la main, soit on recrée le modèle en perdant toutes les modifications apportées.

Du coup, quelle est la meilleure solution ?

(Je précise que ce n'est pas un développement pour une grosse boite, donc pas les moyens d'acheter des licences onéreuses de produits tiers à EF).

Merci d'avance !