2016-10-13 1 views
1

J'utilise C# Entity Framework 6 et j'ai une base de données avec plusieurs schémas, dans ces schémas j'ai des tables avec les mêmes noms. Par exemple:C# Entity Framework 6 - Comment gérer plusieurs schémas ayant les mêmes noms de tables

  1. Rates.Hotel
  2. Availability.Hotel

J'ai un seul projet pour tous mes objets de base de données avec cette structure:

Project Name = Storm.API.Data 
In this project I have folders with the schema names: "Availability", "Rates". 
In each folder I have the proper 'edmx' file. 

Quand je lance mon projet J'obtiens cette erreur:

Schema specified is not valid. Errors: 

The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM 
type 'Hotel'. Previously found CLR type 'Storm.API.Data.Rates.Hotel', 
newly found CLR type 'Storm.API.Data.Availability.Hotel'. 

La seule solution que j'ai trouvée est de séparer les schémas en projet différent, mais comme j'ai plus de 2 schémas, je ne veux pas créer autant de projets pour ça.

Y at-il une autre solution qui me permettra d'avoir tous les schémas sous le même projet sans cette erreur?

+0

Vous pouvez modifier le nom du type d'entité dans le navigateur de modèle pour chaque schéma. Vous disposez donc du schéma Type Availability_Hotel on Availability et Rates_Hotel on Rates. –

+0

Je pense qu'avoir des projets séparés est une bonne solution, car avoir un schéma différent est la définition de votre domaine et il est préférable de rendre cette séparation de domaine claire en ayant des projets distincts. – SOfanatic

Répondre

1

Vous pouvez:

  1. Donnez à chacun d'eux un nom de classe différente dans votre code
  2. Utiliser 2 Different classes DbContext, avec un espace de noms différent pour les entités. Si vous mettez cela dans un autre projet est à vous, mais pas nécessaire.
  3. Vous ne savez pas si cela fonctionnera, mais vaut le coup: Créez un espace de noms pour chaque schéma et disposez de tout dans 1 DbContext.
+0

1. C'est une mauvaise idée de changer manuellement le nom d'une classe sur un code généré automatiquement car il sera perdu lors de la mise à jour du modèle. 2. L'utilisation de 2 DbContext dans le même n'a pas fonctionné. 3. C'est ce que j'ai fait en premier lieu. –