带有实体框架的WCF服务-如果外键出错

本文关键字:如果 出错 服务 WCF 实体 框架 | 更新日期: 2023-09-27 18:18:51

我有一个问题。请注意,我是一个初学者,答案可能很简单……

我使用Visual Studio 2012,我想用实体框架创建一个WCF服务来访问数据库。这可以在5-10分钟内完成…

  • 我用SQL Express创建了一个简单的数据库(例如:2个表:客户端和城市,idCity作为客户端表中的外键)

  • 我创建了一个新的WCF服务

  • 我添加了一个ADO。. NET实体数据模型(.edmx)链接到我的数据库
  • 我创建了一个方法来返回所有的客户端

当我在WCF测试客户端或控制台应用程序中尝试该方法时,我得到一个CommunicazionException错误。

但它工作正确,如果我删除外键在我的客户端表…

getClients方法:

public Client[] GetClients()
{
    using (ClientEntities context = new ClientEntities ())
    {
        context.Configuration.LazyLoadingEnabled = false;
        return context.Client.ToArray();
    }
}

我使用默认配置…

这是一种特殊的方法吗?(我的代码当然是不完整的做我想做的)

在我的应用程序中,我想获得所有客户端,并为每个客户端显示客户端名称和城市名称。

谢谢

带有实体框架的WCF服务-如果外键出错

如果没有更多的细节,很难确切地说出你的问题是什么,但是当你删除客户端表上的外键时,它的工作原理使我相信你有一个数据库或实体框架问题。

你可能想尝试更新你的。edmx。右键单击。edmx图表,选择update model from database,并选择两个表。

如果这不起作用,您也可以尝试从模型中删除每个表(右键单击edxml查看器并选择delete),然后使用数据库中的更新模型重新添加它们。

如果你仍然有问题,试着找出你的代码抛出异常的确切位置。调试GetClient方法,并在返回语句后面放置一个断点,以查看在执行查询时是否发生错误。如果是这种情况,您应该获得更详细的异常消息,以帮助进行故障排除。

try this:

 public Client[] GetClients()
  {
     using (ClientEntities context = new ClientEntities ())
       {
          context.Configuration.LazyLoadingEnabled = false;
          context.Configuration.ProxyCreationEnabled = false;
          return context.Client.ToArray();
        }
  }