【问题标题】:Exposing Entity Framework data types over WCF通过 WCF 公开实体框架数据类型
【发布时间】:2014-04-08 06:38:49
【问题描述】:

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

目前我手头有一个 WCF 服务,它公开了一些基本操作:

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

    [OperationContract]
    User GetUserByUsername(string userName);
}

我还有一个实体框架数据库正在运行。 下面是一段访问服务器的代码。

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 类是什么。如何将我的实体公开为数据成员?

【问题讨论】:

  • 请,请不要这样做。 EF 类从不打算由 WCF 使用(循环属性会立即破坏序列化程序,并且它们有一大堆您不想处理的垃圾)。见:stackoverflow.com/questions/22674692/…
  • 那么您需要一些代理类/DTO 吗?嗯,那是……尴尬。
  • 无论如何使用return db.Users.Any(p => p.UserName == userName) 而不是您的查询。它将生成最高效的 SQL。
  • 对于编辑来说,我们是魔术师 :) 实际上我们只是阅读并回答了很多问题,并且记住了足够多的内容,我们可以发现重复!如果您指的是我标记为可能重复的链接,我实际上是在几周前写了答案:),并在阅读此问题时记住了它。

标签: c# wcf entity-framework


【解决方案1】:

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

虽然将中间层建模为与 db 架构不同可能会更好,但是,制作 ita 域模型,因此 wcf 方法和 EF 对象之间没有一对一的映射。然后你可以让你的 wcf 模型更适合调用者。

以存储库模式为例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多