L'auteur est tout simplement se moquant du référentiel, pas les entités. EntityFramework génère ObjectQueries, mais il les enveloppe et son référentiel renvoie IObjectQueries. Il le fait afin qu'il puisse facilement se moquer des données, puis pendant la sauvegarde il valide simplement les entités.
Si vous essayez simplement de créer un référentiel «fantaisie», vous pouvez créer votre propre modèle T4, parcourir le fichier edmx et générer le code. Mais il n'y a aucune raison d'avoir à générer POCOS? Ils existent déjà, pourquoi avez-vous besoin de les recréer? Il a tout résumé dans un FakeObjectSet "générique" donc il n'y a vraiment pas beaucoup de code à écrire?
Êtes-vous essayer de générer ceci:
public IObjectSet<Blog> Blogs
{
get
{
return _blogs ?? (_blogs = new FakeObjectSet<Blog>());
}
set
{
_blogs = value as FakeObjectSet<Blog>;
}
}
private FakeObjectSet<Blog> _blogs;
Si donc je vais vous deviner allez passer plus de temps avec T4 alors vous écrire juste.
Exemple T4 sans déclaration de classe ... vous pouvez faire la t4 complète en suivant this blog
<#
foreach (EntitySet set in container.BaseEntitySets.OfType<EntitySet>())
{
#>
public IObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>
{
get{
return <#=code.FieldName(set)#> ?? (<#=code.FieldName(set)#> = FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>("<#=set.Name#>"));
}
set{
<#=code.FieldName(set)#> = value as FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>("<#=set.Name#>");
}
}
private FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>> <#=code.FieldName(set)#>;
<#
}
#>
Ce qui générerait ce code:
public IObjectSet<Blogs>{
get{
return _Blogs?? (_Blogs = FakeObjectSet<Blog>("Blogs"));
}
set{
_Blogs= value as FakeObjectSet<Class>("Blogs");
}
}
private FakeObjectSet<Blog> _Blogs;
Side note .
IObjectSet est contenu dans System.Data il faut donc ajouter une référence à System.Data.Entity.dll
Mayby j'étais miss compris, je suis juste basez cet article. Je sais que l'auteur a des classes POCOS, mais j'ai une grande BD déjà existante, j'ai dû créer edmx à partir de cette base de données et après beaucoup de difficultés (c'est Oracle DB), j'ai pu utiliser des templates T4 pour générer des classes POCO. Je ne les ai pas écrites auparavant à la main. Maintenant, je voulais ajouter des tests unitaires et je dois mocker mon objet de contexte si je veux tester des dépôts. T4 a donc généré des classes POCO pour les entités et la classe pour Context, mais il manquait une interface pour ce contexte, donc je ne peux pas créer de maquette en fonction de cette interface. – Simon
Merci à http://slappyza.wordpress.com/2010/08/08/getting-the-entity-framework-to-generate-an-interface-for-mocking/ J'ai résolu le problème pour l'instant .. . :) – Simon
+1. Vraiment, tout ce qui doit arriver est d'ajouter "I" aux déclarations "ObjectSet ..." existantes ... –