Добрый день.
Данные могут получаться из различных источников (excel, xml, СУБД и т.д).
Наружу из модуля видны POCO классы и методы для выборки данных. Есть internal Entity классы для работы с СУБД.
POCO и Entity класс имееют одинаквые поля и типы данных.
Метод выглядит так
public IList<User> GetUsers(Func<User, bool> func)
{
using(var entities = new Entities(_connectionString))
{
entities.ContextOptions.LazyLoadingEnabled = false;
return entities.Users.Where(func).ToList();
}
}
Func<User, bool> в виде параметра принимает POCO классы, а entities.Users entity классы.
Вопрос как можно в Func передать Entity класс, если наружу из модуля он не виден?
Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.
Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>Данные могут получаться из различных источников (excel, xml, СУБД и т.д). А>Наружу из модуля видны POCO классы и методы для выборки данных. Есть internal Entity классы для работы с СУБД. А>POCO и Entity класс имееют одинаквые поля и типы данных. А>Метод выглядит так
А>
А>Func<User, bool> в виде параметра принимает POCO классы, а entities.Users entity классы. А>Вопрос как можно в Func передать Entity класс, если наружу из модуля он не виден?
Правильно ли я понял что этот метод должен вернуть POCO User а не Entity User?
А>Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.
Можно подумать о том чтобы смапить на источник сами POCO классы, тогда не будет такой путаницы. Только нужно будет дописать Query-провайдер + пользовать кастомный маппинг.
В одном из проектов сделали такое для LinqToSql.
Здравствуйте, Аноним, Вы писали:
А>Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.
1) вначале создать POCO объект, а потом только фильтровать:
public IList<User> GetUsers(Func<User, bool> func)
{
using(var entities = new Entities(_connectionString))
{
entities.ContextOptions.LazyLoadingEnabled = false;
return entities.Users
.Select(u => new POCO.User(u))
.Where(func)
.ToList();
}
}
2) Func<dynamic, bool> — но конвертировать Entity->POCO прийдется всё равно
Здравствуйте, Аноним, Вы писали:
А>skipped
EF 4 прекрасно работает с POCO в качестве entity-классов.
Re[2]: Func<Interface, bool> возможно ли?
От:
Аноним
Дата:
31.03.11 16:34
Оценка:
Здравствуйте, alexkh, Вы писали:
A>Правильно ли я понял что этот метод должен вернуть POCO User а не Entity User?
Да
А>>Или вообще любые советы как решить доступ к различным источникам данныч в одном модуле, что бы для клиента наружу были только POCO классы.
A>Можно подумать о том чтобы смапить на источник сами POCO классы, тогда не будет такой путаницы. Только нужно будет дописать Query-провайдер + пользовать кастомный маппинг. A>В одном из проектов сделали такое для LinqToSql.
Спасибо. Буду гуглить
Re[2]: Func<Interface, bool> возможно ли?
От:
Аноним
Дата:
31.03.11 17:59
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, Аноним, Вы писали:
А>>skipped HL>EF 4 прекрасно работает с POCO в качестве entity-классов.
Спасибо. Буду читать.