从WCF返回实体框架对象

从WCF返回实体框架对象,wcf,entity-framework-4,linq-to-entities,Wcf,Entity Framework 4,Linq To Entities,我正在从事WCF服务,为多个移动客户端提供数据。数据模型是实体框架4.0。模式如下所示 当我返回SysUser的对象时,结果还包含导航属性和EntityKey以及其他与EF相关的内容。我是否可能得到纯对象(只有数据库字段,没有关系等) 谢谢 更新 在以下代码中出现异常“LINQ to Entities中仅支持无参数构造函数和初始值设定项”: return (from u in DataSource.SysUsers where u.UserID == Us

我正在从事WCF服务,为多个移动客户端提供数据。数据模型是实体框架4.0。模式如下所示

当我返回SysUser的对象时,结果还包含导航属性和EntityKey以及其他与EF相关的内容。我是否可能得到纯对象(只有数据库字段,没有关系等)

谢谢 更新 在以下代码中出现异常“LINQ to Entities中仅支持无参数构造函数和初始值设定项”:

return (from u in DataSource.SysUsers
                   where u.UserID == UserID
                   select new Player(u)
                   ).FirstOrDefault();
您可能希望通过导线而不是EF对象发送s


您可以使用类似的东西从EF对象填充DTO。

我认为如果您删除
SysUser
模型中导航属性的
virtual
关键字,这些属性将不会被加载。稍后,如果需要加载此属性,可以按照以下说明手动加载:

现在,如果您想通过WCF服务进行
SysUser
旅行,这不是一个好主意。首先,您的服务的客户将需要对您的模型项目的引用。。。这感觉不对。如果您不引用您的模型,您将得到它的代理,这或多或少与Joe R解释的DTO相同


这里有一个相关的答案:

谢谢Joe,我想我得到了正确的答案,因为我是EF的新手,所以我认为EF中可能有内置的东西来获取DTO。现在,我只是在自己的DTO的构造函数中进行映射。如果需要的话,以后会在更大的项目中使用自动映射器。一件事是向我确认,要隐藏我的业务对象和其他东西,我需要另一个类,比如只包含我必须发送的信息的播放器。公共播放器(系统用户){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;}是的,这是正确的-使用另一个类(DTO)仅包含需要通过连接发送的字段。在将LINQ对象传递给构造函数时,出现了一个问题,“LINQ to Entities中只支持无参数构造函数和初始值设定项。发生异常”。返回(从DataSource.SysUsers中的u,其中u.UserID==UserID选择新播放器(u)).FirstOrDefault();–LojiSmith Kaleem 42秒前编辑您是否在EF类中创建了新的构造函数?您需要确保类中存在没有任何参数的构造函数。出现了一个问题,“LINQ to Entities中只支持无参数构造函数和初始值设定项。出现异常”将linq对象传递给constructor.return时(从DataSource.SysUsers中的u开始,其中u.UserID==UserID选择新播放器(u)).FirstOrDefault();不能传递“u”参数…这就是异常的原因。嘿,我使用了Automapper,它简单地让映射对我来说很有趣:pWhy你对返回实体感觉不正确!?你的dto将是完全相同的对象,而不是这个;首先考虑代码,忽略EF的功能…@efaruk如果你有多个移动客户端使用该服务,最好不要使用c与EF模型耦合。即使您没有服务,例如在MVC项目中,最好在视图中使用ViewModels而不是EF模型。