Stark zurück Typ JSON Monorail mit
-
16-09-2019 - |
Frage
Ich rufe die folgende Methode in meinem Controller mit $ .getJSON ()
[return: JSONReturnBinder]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
var fields = from f in userfields
select new {f.ID, f.FieldName};
return fields;
}
Meine _profileSvc kommt zurück mit zusätzlichen Daten, die ich nicht brauche (eigentlich bekomme ich NHibernate Fehler, weil die Sitzung geschlossen wird).
Gibt es eine bessere Art und Weise zu tun, was ich tue? Soll ich stark den Datentyp Ich kehre oder ist dieser Ansatz ausreichend?
Danke.
Lösung
Ich würde eine Projektion verwenden (SetProjection()
) und SetResultTransformer()
, um das Ergebnis zu einem DTO stark ein.
Siehe auch:
- http://www.nhforge.org/doc /nh/en/index.html#querycriteria-projection
- http://www.junasoftware.com/blog/nhibernate -setresulttransformer-and-dto.aspx
- http: / /ayende.com/Blog/archive/2007/08/30/Slicing-amp-Dicing-Queries-with-NHibernate.aspx
- http://devlicio.us/blogs/derik_whittaker/archive/2009/05/27/nhibernate-amp-setprojects-setprojects-w-list-gotcha.aspx
Andere Tipps
Haben Sie schon versucht mit
[return: JSONReturnBinder(Properties = "ID,FieldName")]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
return userfields;
}
Ich hoffe, das hilft.
Als erstes würde ich den Rückgabewert der Aktion ändern ein IList zu sein ...
Ich denke, dass die Sitzungsfehler geschlossen von einer verzögerten Ausführung stammen kann ‚var Felder‘. Wenn Sie Ihren Return-Anweisung zu fields.ToList () ändern, dass die Ausführung des Lambda-Ausdruck zwingen wird, und Sie könnten der Session Fehler loszuwerden:
[return: JSONReturnBinder]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
var fields = from f in userfields
select new {f.ID, f.FieldName};
return fields.ToList();
}