2

J'espère que cela a du sens. J'ai une application Web ASP.NET qui utilise Entity Framework. J'ai ajouté quelques tables personnalisées à la base de données et créé un projet distinct pour gérer les opérations CRUD pour ces tables. J'ai choisi le projet séparé car je ne veux pas que les futures mises à niveau de l'application écrasent mes fonctionnalités personnalisées.Attacher des ObjectSets supplémentaires à ObjectContext à partir du projet séparé

Mon problème est le suivant. Comment joindre/combiner mon objet ObjectContext personnalisé au ObjectContext de l'application? Je veux utiliser le même UnitOfWorkScope (déjà dans l'application) pour gérer l'instance ObjectContext par requête HTTP. Encore une fois, je ne veux pas ajouter mes ObjectSets à ObjectContext de l'application pour la raison indiquée ci-dessus.

Voici un code:

Widget.cs

public partial class Widget 
{ 
public Widget() 
{ 
} 
public int WidgetId {get;set;} 
public string WidgetName {get;set;} 
} 

WidgetObjectContext.cs

public partial class WidgetObjectContext : ObjectContext 
{ 
private readonly Dictionary<Type, object> _entitySets; 

public ObjectSet<T> EntitySet<T>() 
where T : BaseEntity 
{ 
var t = typeof(T); 
object match; 
if(!_entitySets.TryGetValue(t, out match)) 
{ 
match = CreateObjectSet<T>(); 
_entitySets.Add(t, match); 
} 
return (ObjectSet<T>)match; 
} 

public ObjectSet<Widget> Widgets 
{ 
get 
{ 
if((_widgets == null)) 
{ 
_widgets = CreateObjectSet<Widget>(); 
} 
return _widget; 
} 
} 
private ObjectSet<Widget> _widgets; 

Dans ma classe WidgetManager si j'utilisais ObjectContext de l'application j'interroger mes tableaux comme ceci:

var context = ObjectContextHelper.CurrentObjectContext; 
var query = from c in context.ObjectSet .... etc 

Ce que je veux serait de faire quelque chose comme ceci:

var context = ObjectContextHelper.CurrentObjectContext.Attach(WidgetObjectContext); 

Je sais que cela ne fonctionne pas, mais c'est l'essentiel de ce que je suis en train d'accomplir. J'espère que c'est assez clair. Merci.

Répondre

1

Je ne pense pas que ce soit possible. ObjectContext crée une connexion d'entité qui se connecte aux métadonnées décrivant le mappage et la base de données. Mais vous devez avoir différents ensembles de métadonnées - un pour l'application ASP.NET et un autre pour le projet séparé. Vous avez simplement besoin de deux connexions pour travailler avec ces modèles = > vous avez besoin de deux ObjectContexts.

+0

J'avais peur que cela soit vrai. Cela a du sens en fonction de votre logique. Ce que j'ai fini par faire était de créer un modèle de données séparé qui ne modélisait que mes tables personnalisées. J'ai ensuite utilisé le modèle de générateur d'entité POCO et cela m'a donné tout ce dont j'avais besoin. Très simple et rapide. Merci pour votre contribution Ladislav. – trevorc

1

FYI: La réponse précédente était correcte au moment de la réponse. Il est maintenant possible de le faire en utilisant le DbContext disponible dans EF 4.1. La mise en garde est que vous devez utiliser la stratégie code-first afin de créer votre contexte personnalisé. En d'autres termes, vous ne pourrez pas utiliser les fichiers EDMX pour accomplir ceci.