Я пытаюсь найти ясный способ перенести мои классы моделей из LINQ в объекты, сгенерированные SQL. Моя цель - разделить мои Модели и LinqModels. Скажем, у меня есть следующие модели:
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;}
}
Теперь у меня также есть почти идентичные модели данных, сгенерированные LINQ to SQL. Поэтому, если я хочу заполнить объект Person, я собираюсь добавить метод get в частичный класс DataContext:
public Person GetPersonByID(int personID) {
....
}
Как мы заполняем этот объект Person и его дочерние свойства в остальной части приложения, делается так:
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;
}
Таким образом, для каждого дочернего свойства нам нужно расширить запрос. Что бы я на самом деле предпочел бы, так это если бы я мог сделать что-то вроде этого:
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
}
}
Это гораздо более управляемо, но первоначальный вызов GetPersonByID не возвращает данные, которые мне нужны для заполнения этих дочерних объектов. Есть ли способ обойти это?
Или есть лучшая альтернатива заполнению объектов модели с помощью LINQ to SQL?
*** Извините, если мои примеры кода не совсем верны *