Toon posts:

[ASP.NET] Databinding en updaten van business objecten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb een klein voorbeeld gemaakt met een "Person" klasse, welke een lijst van Pets bevat. Daarnaast een simpele repository die de Person objecten kan saven/deleten/selecten.
Nu plak ik een formview (of detailsview) op mijn formulier, kies voor een objectdatasource welke wijst naar mijn repository. Tot nu toe werkt het perfect, ik kan personen aanmaken, updaten, deleten, alles... Ik kan zelfs mijn collectie pets tonen door een itemtemplate te maken binnen mijn formview.

Maar tijdens het updaten raak ik wel mijn collectie pets kwijt! Als ik kijk naar het "Updating" event van de objectbindingsource, zie ik ook dat in de e.InputParameters mijn Person alle waarden bevat die ik ingevuld heb, maar de collectie pets bevat altijd 0 items. Als ik kijk naar het Selected event van de objectbindingsource, zie ik in de e.ReturnValue wel mijn person inclusief pets. Iemand een idee?

Person klasse
[code=c#]
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }

public List<Pet> Pets { get; set; }

public Person()
{
Pets = new List<Pet>();
}
}
[/code=c#]

Repository
[code=c#]
[DataObject]
public class Repository
{
List<Person> people = new List<Person>();

public Repository()
{
//Code to load the person list
}

public Person FindByID(int ID)
{
return people.SingleOrDefault(x => x.ID == ID);
}

public List<Person> FindAll()
{
return people;
}

public void Save(Person person)
{
// code to save a person
// Here you can see a person's pets collection is always empty
// when this method is called by the objectdatasource
}

public void Delete(Person person)
{
}

public void Insert(Person person)
{
}
}
[/code=c#]

Acties:
  • 0 Henk 'm!

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10

jvaneijk

Dr.Oak

Weet niet of dit onder flamen valt, maar is het niet handig om een kijkje te nemen naar Linq? die kan dit soort dingen heel erg goed geloof ik, maar dat weet ik niet zeker.

iRacing Profiel


Acties:
  • 0 Henk 'm!

  • Vincenz0
  • Registratie: Augustus 2006
  • Laatst online: 12-09 09:48

Vincenz0

Coder

jvaneijk schreef op donderdag 26 maart 2009 @ 10:30:
Weet niet of dit onder flamen valt, maar is het niet handig om een kijkje te nemen naar Linq? die kan dit soort dingen heel erg goed geloof ik, maar dat weet ik niet zeker.
is
C#:
1
return people.SingleOrDefault(x => x.ID == ID); 

Niet al linq?

Coding 4 Fun!


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
jvaneijk schreef op donderdag 26 maart 2009 @ 10:30:
Weet niet of dit onder flamen valt, maar is het niet handig om een kijkje te nemen naar Linq? die kan dit soort dingen heel erg goed geloof ik, maar dat weet ik niet zeker.
Je weet dat Linq in principe niks met een database te maken heeft? Linq staat voor Language Integrated Query, en het is gewoon een stukje syntax om eenvoudig data te query'en. Er zijn verschillende Linq providers die inderdaad als data-source een database gebruiken, maar het zijn de providers die het werk doen. LINQ zelf doet helemaal niks met de database. Maar het is een beetje apart, om als iets niet direct doet wat je wilt, om maar meteen ergens anders op over te schakelen.

Ik heb zelf nooit gewerkt met DataObject's op deze manier, maar als ik in de msdn kijk zie ik dat ze daar ook nog meer attributes gebruiken zoals het DataObjectFieldAttribute, moet je dus je velden ook niet decoreren met een Attribute?

[ Voor 11% gewijzigd door Woy op 26-03-2009 10:55 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10

jvaneijk

Dr.Oak

Vincenz0 schreef op donderdag 26 maart 2009 @ 10:50:
[...]


is
C#:
1
return people.SingleOrDefault(x => x.ID == ID); 

Niet al linq?
Sorry ben nog niet helemaal wakker ik zag die notatie even te laat.

iRacing Profiel


Acties:
  • 0 Henk 'm!

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10

jvaneijk

Dr.Oak

Woy schreef op donderdag 26 maart 2009 @ 10:53:
[...]

Je weet dat Linq in principe niks met een database te maken heeft? Linq staat voor Language Integrated Query, en het is gewoon een stukje syntax om eenvoudig data te query'en. Er zijn verschillende Linq providers die inderdaad als data-source een database gebruiken, maar het zijn de providers die het werk doen. LINQ zelf doet helemaal niks met de database. Maar het is een beetje apart, om als iets niet direct doet wat je wilt, om maar meteen ergens anders op over te schakelen.

Ik heb zelf nooit gewerkt met DataObject's op deze manier, maar als ik in de msdn kijk zie ik dat ze daar ook nog meer attributes gebruiken zoals het DataObjectFieldAttribute, moet je dus je velden ook niet decoreren met een Attribute?
Ik heb toch ook niets over Databases gezegd of ben ik echt niet wakker? want volgens mij gebruikt hij Lists en geen DB maar dat doet er even niet toe.

iRacing Profiel


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
jvaneijk schreef op donderdag 26 maart 2009 @ 11:15:
[...]
Ik heb toch ook niets over Databases gezegd of ben ik echt niet wakker?
Volgens je post hierboven ieder geval niet ;)
want volgens mij gebruikt hij Lists en geen DB maar dat doet er even niet toe.
Je hebt gelijk, echter wat ik probeerde duidelijk te maken is dat Linq zelf niet veel met de data doet, maar dat het gewoon wat syntax is. De provider die je gebruikt geeft de invulling eraan.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10

jvaneijk

Dr.Oak

Woy schreef op donderdag 26 maart 2009 @ 11:22:
[...]

Volgens je post hierboven ieder geval niet ;)


[...]

Je hebt gelijk, echter wat ik probeerde duidelijk te maken is dat Linq zelf niet veel met de data doet, maar dat het gewoon wat syntax is. De provider die je gebruikt geeft de invulling eraan.
Ahhh... Het begint me te dagen wat je probeert te zeggen :D zoals ik al zij ben nog niet wakker :D
maar toch bedankt voor de opheldering.

Nu maar wachten van de TS ervan vindt ;)

[ Voor 4% gewijzigd door jvaneijk op 26-03-2009 12:02 ]

iRacing Profiel


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In mijn echte project gebruik in nhibernate met linq2hibernate, maar heb juist dit voorbeeld gemaakt om aan te tonen dat de lijsten leeggemaakt worden, zelfs al gebruik je helemaal geen persistencyframework. In het nhibernate voorbeeld zie je natuurlijk het zelfde gedrag. Het selecteren van objecten is ook niet het probleem maar het updaten...
Pagina: 1