J'essaie de trouver une manière claire de remplir mes classes de modèles d'objets générés LINQ à SQL. Mon objectif est de garder mes modèles et LinqModels séparés. Disons que j'ai les modèles suivants:Remplissage de modèles à l'aide de LINQ
public class Person {
public List<Account> Accounts {get; set;}
}
public class Account {
public List<Purchase> Purchases {get; set;}
}
public Purchase {
public String Whatever {get; set;}
}
Maintenant, j'ai aussi des modèles de données presque identiques générés par LINQ to SQL. Donc, si je veux remplir un objet personne que je vais ajouter un getter dans la classe partielle DataContext:
public Person GetPersonByID(int personID) {
....
}
Comment nous remplissons cet objet Personne et ses propriétés enfants tout au long du reste de l'application se fait comme this:
public Person GetPersonByID(int personID) {
Person res =
from p in Persons
select new Person() {
Accounts = (
from a in p.Accounts
select new Account() {
Purchases = (
from m in p.Purchases
select new Purchase() {
Whatever = m.Whatever
}
).ToList()
}
).ToList()
}
return res;
}
Donc, pour chaque propriété enfant, nous devons étendre la requête. Ce que je préférerais vraiment est de savoir si je pouvais faire quelque chose comme ceci:
public Person GetPersonByID(int personID) {
return new Person(this.Persons.SingleOrDefault(p => p.ID == personID));
}
....
public class Person {
public Person(DataModels.Person p) {
Accounts = (from a in p.Accounts select new Account(a)).ToList();
}
}
public class Account {
public Account(DataModels.Account a) {
Purchases = (from r in a.Purchases select new Purchase(r)).ToList();
}
}
public class Purchase {
public Purchase(DataModels.Purchase r) {
Whatever = r.Whatever
}
}
Cela est beaucoup plus facile à gérer, mais l'appel GetPersonByID initial ne retourne pas les données que je dois remplir ces objets enfants. Y at-il un moyen de contourner cela?
Ou existe-t-il une meilleure alternative à remplir des objets de modèle en utilisant LINQ to SQL?
*** Désolé si mes exemples de code ne sont pas tout à fait raison *