Je fais un site intranet en utilisant ASP.NET MVC et SQL Server 2012. Je fais un référentiel et l'architecture avec Oignon Architecture. Mon problème est que la société dans laquelle je travaille, a déjà plusieurs DB de serveur dans lesquels les tables n'ont aucune relation entre elles. Au lieu de cela, il existe des tables pour cartographier ces relations. Par exemple une table Utilisateur, et une table Document ont une table User_joint_Document pour faire une relation, contenant à la fois les IDs (IDDocument et IDUser). Maintenant, quand j'écris mon dépôt générique:Entity Framework et Repository Pattern difficultés conceptuelles
class Repository<T> : IRepository<T> where T : class
le problème est le T de type générique n'a pas de sens et je ne peux pas affecter les valeurs dans mon modèle à l'aide des requêtes EF ce qui est normal, et ce serait génial serait ont une BaseEntity de classe parente d'avoir ID définis pour chaque table, je peux écrire:
class Repository<T> : IRepository<T> where T : BaseEntity
Et tous mes modèles de table hériterait de BaseEntity. Mais cela signifierait aussi réécrire l'ensemble de la DB de manière relationnelle et mapper chaque DB POCO manuellement (corrigez-moi si je me trompe), et je n'ai pas la compétence pour le faire (il y a plus de 300 tables dans les différents DBs du serveur et je manque de connaissances et d'expérience pour faire ce genre d'opération).
Existe-t-il un moyen de conserver ma structure de base de données d'origine et d'écrire un référentiel générique? Comment irait-on faire ça?
EDIT Pour clarifier ma question, car @saeb a répondu partiellement à ma question. Puis-je avoir un repo générique sans avoir de classe parent pour mes DB POCO? Ou en ai-je besoin pour avoir alors UN seul référentiel pour les gouverner tous? Par exemple:
class Repository<T>:IRepository<T> where T : class
{
private readonly ApplicationContext context;
private DbSet<T> entities;
public Repository(PrincipalServerContext context)
{
this.context = context;
entities = context.Set<T>();
}
public T Get(long id)
{
return entities.SingleOrDefault(s => s.IDUser == id);
//This does not work, IDUser isn't recognized
}
Merci pour votre aide!
l'exemple que vous avez donné de '' Users' et Documents' est correct dans la base de données. Un utilisateur peut avoir de nombreux documents, vous avez donc besoin d'une table de jonction de 'User_joint_Document'. C'est exactement comme cela qu'une base de données relationnelle devrait être structurée. – melkisadek
Mais si vous utilisez Onion Architecture, il y a un paquet qui crée des dépôts automatiquement pour vous, il vous suffit de les enregistrer dans DataOnion. –
@melkisadek Bah! Voilà à quel point je suis à travailler sur les DB. J'aurais pensé que vous auriez quelque chose comme une relation 1-1 entre les deux tables ou quelque chose comme ça? Peut-être que ce rapport est une table réelle? Vraiment pas mon côté fort. Si je crée une classe parente avec des ID, que devient cette table de relations? Comme il avait IDDocument et IDUser, mais maintenant je n'aurais ID que de la classe parente –