在WCF上公开实体框架数据类型

时间:2014-04-07 22:28:19

标签: c# wcf entity-framework

编辑:我不知道你们是怎么做的,但这个问题确实是重复的。见上文。

目前我手上的东西是一个WCF服务,它暴露了一些基本操作:

public interface IUniService
{
    [OperationContract]
    bool IsUser(string userName);

    [OperationContract]
    User GetUserByUsername(string userName);
}

我还运行了一个Entity Framework数据库。 这是访问服务器的一些代码。

public bool IsUser(string userName)
{
    using (UniDBEntities db = new UniDBEntities())
    {
        User a = new User();
        var user = db.Users.Where(p => p.UserName == userName).ToList();
        return (user.Count() != 0);
    }
}

但我的问题是,我想通过WCF服务公开当前在我的实体框架中的一些类。当我写一个像:

这样的函数时
User GetUserById(int id)

当我返回结果时,似乎我的客户端不知道User类是什么。如何将我的实体公开为Datamembers?

1 个答案:

答案 0 :(得分:1)

我认为您不能轻易地透明地将EF对象与数据库断开连接,但是您可以创建一个dto或poco并通过网络发送它。对于读取不是问题,您发送只读数据,用于写入数据库,创建专用于更新数据的方法,或者您可以获取EF对象,发送和接收副本,适当地包装为poco / dto,以及然后用更改来更新它。

尽管将中间层建模的方式与db模式不同可能更好,但是,使其成为域模型,因此wcf方法和EF对象之间不存在1对1的映射。然后,您可以使您的wcf模型更适合调用者。

查找存储库模式作为示例。