2013-05-07 1 views
0

Je travaille avec un modèle de domaine qui a été cartographiée de la manière suivante:NHibernate, la bonne façon de travailler avec des mandataires

  • contrat IProxy (y compris Id)
  • classe entité d'exécution du contrat

Exemple:

public class Product : IProductProxy {} 

La classe est mis en correspondance en utilisant la logique suivante:

<class name="Product" table="[Products]" lazy="true" proxy="IProductProxy"> 

En ce moment, je trouve que les méthodes suivantes fonctionnent correctement:

var result = session.Load<IProductProxy >(1); 
var result = session.Get<IProductProxy>(1); 
var result = session.Get<Product>(1); 

Bien que ces méthodes jettent « exception proxy » ou « exception de transtypage invalide »

var result = session.Load<Product>(1); 

Ce que j'ai besoin de savoir est, quelle est la bonne façon de travailler avec les proxies et NHibernate. Par exemple, Je pensais que travailler directement avec l'interface serait bien, mais lorsque je tente de le faire:

// successful save 
var result = session.Get<Customer>("ALFKI"); 
result.Name = "XXX"; 
session.Update(result); 

// if error occurs I receive wrong exception 
// cannot find mapping for ICustomerProxy ERROR 
var result = session.Get<ICustomerProxy>("ALFKI"); 
result.Name = "XXX"; 
session.Update(result); 

Dois-je toujours rejetterait à IProxy ou devrais-je utiliser mon type d'entité?

+0

Quelle est la raison de fournir une interface proxy? – cremor

+0

Ce n'est pas la question – Raffaeu

+0

Fournir une propre interface proxy n'est pas l'utilisation normale des proxies NHibernate. Si nous savons pourquoi vous faites cela, nous serons peut-être en mesure de mieux vous aider. – cremor

Répondre

1

var result = session.Load<Product>(1); ne peut pas fonctionner. Load() renvoie un proxy si l'entité n'est pas encore dans la session. Comment NHibernate devrait-il créer un proxy (classe héritée) de type Product si vous aviez dit à NHibernate que les proxys de ce type d'entité devaient seulement implémenter l'interface IProductProxy?

+0

C'est la réponse que je cherchais. Malheureusement, je n'ai pas trouvé dans les documents que Load renvoie toujours l'objet mandaté. – Raffaeu

Questions connexes