2010-06-22 5 views
3

Je souhaite effectuer un insert générique dans entity framework. C'est ce que je l'ai écrit -Comment effectuer un insert générique dans entity framework?

static public void Insert<T>(MyEntities DataContext, T obj) where T : class 
     { 
      try 
      { 
       DataContext.AddObject(DataContext,obj); 
       DataContext.SaveChanges(); 
      } 
      catch (Exception e) 
      { 
       throw new Exception("Problems adding object" + e); 
      } 
     } 

Mais comme vous pouvez voir la méthode AddObject n'est pas ce que je veux ... il donne exception car il attend un enitysetname je veux passer dans l'objet, puis ajouter cet objet à ma base de données. Mais je ne peux pas faire AddtoObjectName() car je ne connais pas l'objet. Quelqu'un peut-il me pointer dans la bonne direction ici ..

Répondre

6

Dans EF 4, vous pouvez faire:

var os = DataContext.CreateObjectSet<T>(); 
os.AddObject(obj); 
DataContext.SaveChanges(); 

Et s'il vous plaît retirer la pile manger try/catch.

+0

Merci ... ça a marché ... juste une question que vous suggérez que je devrais supprimer essayer/attraper mais alors ce serait pas de manipulation d'erreur? ... Je suis désolé mais je l'utilise toujours ... est-il un meilleur moyen de avoir une gestion des erreurs? – Vishal

+1

Vous n'avez pas de gestion des erreurs avec votre code existant. Vous avez une erreur d'obfuscation. –

+0

Merci de fournir la source. Ce sera très utile. – StriplingWarrior

2

Le problème est que l'Entity Framework permet la possibilité de plusieurs ensembles qui utilisent le même type, de sorte qu'il doit avoir un nom de type pour fonctionner. Si vous savez que vous n'utiliserez pas plusieurs ensembles avec le même type, vous pouvez suivre une convention de dénomination qui permet de construire le nom à partir du type.

Nous avons eu le même problème, et nous avons initialement décidé de nommer chaque ensemble d'entités [Type]Set (par exemple, FormSet, ActivitySet). Avec l'avènement de .NET 4.0, Microsoft a exposé l'API qu'il utilise pour le pluralisme des ensembles d'entités dans l'outil EF de Visual Studio. Nous envisageons donc de conserver les pluriels par défaut et d'utiliser cet outil pour comprendre sur ce que le nom par défaut est (par exemple Forms, Activities).

using System.Data.Entity.Design.PluralizationServices; 
... 
internal static readonly PluralizationService PluralizationService = 
     PluralizationService.CreateService(CultureInfo.CurrentCulture); 
... 
static public void Insert<T>(MyEntities DataContext, T obj) where T : class 
{ 
    try 
    { 
     string setName = PluralizationService.Pluralize(typeof(T).Name); 
     DataContext.AddObject(setName,obj); 
     DataContext.SaveChanges(); 
    } 
    catch (Exception e) 
    { 
     throw new Exception("Problems adding object" + e); 
    } 
} 
+0

EntityCommon.PluralizationService.Pluralize où puis-je trouver cette bibliothèque? J'utilise .net 4.0 – Vishal

+0

Avec EF 4, il existe une solution encore meilleure: 'ObjectSet'. –

+0

@VJ: Mon erreur. EntityCommon était notre classe. Voir ma réponse mise à jour. @Craig Stuntz: Si je comprends bien, le but de cette méthode est d'être générique au point que vous ne devez jamais spécifier dans quel ObjectSet vous essayez d'insérer les objets. ObjectSet est meilleur pour les méthodes one-off car il fournit la sécurité du type, mais je ne sais pas comment vous le faire fonctionner dans ce cas. – StriplingWarrior

Questions connexes