2013-05-28 4 views
3

Я работаю над сервисом WCF для предоставления данных нескольким мобильным клиентам. Модель данных - Entity Framework 4.0. Схема приведена ниже.Возвращает объекты Entity Framework из WCF

Schema

Когда я returnt он объект SysUser результат также содержит свойства навигации и EntityKey и другие EF связанные вещи. Возможно ли, что я получаю чистый объект (только поля базы данных без отношения и т. Д.).

Благодаря Update исключение встречается, «только без параметров Конструкторы и Инициализаторы поддерживаются в LINQ к Entities». на followign код:

return (from u in DataSource.SysUsers 
        where u.UserID == UserID 
        select new Player(u) 
        ).FirstOrDefault(); 

ответ

2

Я думаю, что если вы удалите ключевое слово virtual в своей модели для навигационных свойств SysUser, они не будут загружены. Позже, если вам нужно загрузить эти свойства, вы можете сделать это вручную, как указано здесь: http://msdn.microsoft.com/en-us/data/jj574232

Теперь, если вы хотите сделать SysUser путешествие по службе WCF, это не очень хорошая идея. Во-первых, клиенту вашего сервиса потребуется ссылка на ваш проект моделей ... и это не кажется правильным. Если вы не ссылаетесь на свои модели, вы получите прокси-сервер, более или менее такой же, как объяснил Джо R о DTO.

Вот родственный ответ: https://stackoverflow.com/a/7161377/7720

+0

wow thats точно я стоял лицом к лицу, и я получил ответ, спасибо – LojiSmith

+0

Проблема: «В LINQ to Entities поддерживаются только конструкторы и инициализаторы без параметров, при передаче объекта linq в конструктор. return ( от u в DataSource.SysUsers где u.UserID == UserID выбрать новый Player (u) ) .FirstOrDefault(); – LojiSmith

+0

Вы не можете передать параметр «u» ... вот почему исключение. – Romias

3

Вы, вероятно, хотите отправить DTO сек по проводам, а не ваших объектов EF.

Вы можете использовать что-то вроде AutoMapper для заполнения ваших DTOs из объектов EF.

+0

благодаря Джо я думаю, что я получил правильный ответ, так как я новичок в EF, так что я подумал, что может быть что-то построить в в EF, чтобы получить DTOs. ну на данный момент я просто сделал картографическую вещь в конструкторе моего собственного DTO. позже будет использовать auto mapper для более крупного проекта, если это необходимо. – LojiSmith

+0

одна вещь подтверждает мне, что, чтобы скрыть свой бизнес-объект и другие вещи, мне нужен другой класс, говорящий о игроке, который содержит только информацию, которую я должен отправить. общественный игрок (пользователь SysUser) { UserID = User.UserID; FirstName = User.FName; Email = User.Email; LastName = User.LName; Password = User.Password; ReceiveNewsletter = User.ReceiveNewsletter == null? false: User.ReceiveNewsletter.Value; UserName = User.UserName; } – LojiSmith

+0

plz сообщите мне, если я ошибаюсь – LojiSmith

Смежные вопросы