2010-09-20 13 views
0

Comme d'habitude, j'ai un problème avec ria service + nhibernate. La question est comment faire une propriété d'entité , mappée à l'aide de "références", visible du côté client. Le problème est que lorsque vous chargez une entité sans ce champ et tentez de l'enregistrer, les valeurs manquantes sont mises à jour en tant que NULL dans db. Voici le schéma de classe:Propriété "Références" non visible côté client

public class A 
{ 
      public virtual ComplexProperty property {get;set;} 
} 

public class AMap 
{ 
    public AMAP() 
    { 
    References(p=>p.property).Nullable().Column(“COMPLEX_PROPERTY_ID”); 
    } 
} 

(je l'ai Skipped Parts avec cartographie/déclarant propriété clé comme il est fait à l'intérieur des classes sous-jacentes) astuce habituelle d'inclusion et d'attribut d'association (comme avec hasMany) ne fonctionne pas comme il n'y a propriété réelle foreign_key à l'intérieur classe A

Répondre

0

trouvé une solution qui fonctionne pour moi. Il suffit d'ajouter "fausse" propriété de clé étrangère à la classe A qui n'est pas mappée à la base de données. Il permet de définir l'association:

 public class A 
     { 
      [Include] 
      [Association("Relation1","ComplexPropertyId","Id")] 
      public virtual ComplexProperty property {get;set;} 
      public virtual int ? ComplexPropertyId {get;set;} 
     } 

La dernière chose à faire est de définir ComplexPropertyId manuellement sur le côté client après avoir récupéré des objets de db (correspondances restent comme ils l'étaient).

public IQueryable<A> GetA() 
{ 
var item = repository.Query<A>(); 
foreach(var a in item) a.ComplexPropertyId = a.ComplexProperty.Id; 
return item; 
}