我正在使用C#和后端的.NET实体框架创建Web应用程序。我有三个处理我的数据的PostgreSQL表:事件,用户和组。用户属于组,组属于事件。
我想要做的是允许HTTP GET请求让所有用户参加活动。 (API调用包含事件ID。理想情况下,用户可以向 api / events / 1 / users 发送GET请求,然后执行:
在group表中搜索eventid为1的所有组;
从每个组中获取用户列表。
Per this website's instructions,我在模型中为用户和组设置了我的相关数据(多对多)。 问题在于这样做打破了以前工作的一些方法。
这是我的小组模特:
namespace api.Models
{
public class Group
{
public Group()
{
this.users = new HashSet<User>();
}
[Key]
public int id { get; set; }
public int eventid { get; set; }
[Required]
public string groupname { get; set; }
public virtual ICollection<User> users { get; set; }
}
}
...这是我的用户模型:
namespace api.Models
{
public class User
{
public User()
{
this.groups = new HashSet<Group>();
}
[Key]
public string id { get; set; }
[Required]
public string phone { get; set; }
public virtual ICollection<Group> groups { get; set; }
}
}
我可以在群组控制器中使用以下方法查询单个群组:
[Route("groups/{id}",Name="GetGroup")]
[HttpGet]
[ResponseType(typeof(Group))]
public async Task<IHttpActionResult> GetGroup(int id)
{
Group @group = await db.groups.FindAsync(id);
if (@group == null)
{
return NotFound();
}
return Ok(@group);
}
这会返回一个单独的组,其中包含所有用户的列表。
问题是此方法不再有效:
[Route("events/{eventid}/groups")]
[HttpGet]
public IQueryable<Group> GetGroupsByEvent(int eventid)
{
return db.groups.Where(l => l.eventid == eventid);
}
这一直有效,直到我将相关用户添加到群组模型。现在,当我尝试向 api / events / 1 / groups 发出请求时,我得到一个Npgsql.NpgsqlOperationInProgressException并带有以下消息:
&#34; ExceptionMessage&#34;:&#34;命令已在进行中:SELECT \&#34; Extent1 \&#34;。\&#34; id \&#34;,\&#34; Extent1 \&#34;。\&#34; eventid \&#34;,\& #34; Extent1 \&#34; \&#34;组名\&#34; FROM \&#34; public \&#34;。\&#34; Groups \&#34; AS \&#34; Extent1 \&#34;哪里 \&#34; Extent1 \&#34; \&#34;事件ID \&#34; = @ p__linq__0&#34;,
这是Visual Studio的调试输出:
在9/26/2017 8:35:32 AM -04:00
打开连接SELECT&#34; Extent1&#34;。&#34; id&#34;,&#34; Extent1&#34;。&#34; eventid&#34;,&#34; Extent1&#34;。& #34;组名&#34;从 &#34;公共&#34;&#34;组&#34; AS&#34; Extent1&#34;在哪里&#34; Extent1&#34;。&#34; eventid&#34; = @ p__linq__0
- p__linq__0:&#39; 1&#39; (Type = Int32,IsNullable = false)
- 执行时间为9/26/2017 8:35:32 AM -04:00
- 在1 ms内完成,结果为:NpgsqlDataReader
SELECT&#34; Extent2&#34;。&#34; id&#34;,&#34; Extent2&#34;。&#34; phone&#34; FROM&#34; public&#34;。&#34; UserGroups&#34;如 &#34; Extent1&#34; INNER JOIN&#34; public&#34;。&#34;用户&#34; AS&#34; Extent2&#34;上 &#34; Extent1&#34;&#34; USER_ID&#34; =&#34; Extent2&#34;。&#34; id&#34;在哪里&#34; Extent1&#34;。&#34; Group_id&#34; = @ EntityKeyValue1
- EntityKeyValue1:&#39; 1&#39; (Type = Int32,IsNullable = false)
- 执行时间为9/26/2017 8:35:32 AM -04:00
- 0 ms失败并显示错误:命令已在进行中:SELECT&#34; Extent1&#34;。&#34; id&#34;,&#34; Extent1&#34;。&#34 ; eventid&#34;,&#34; Extent1&#34;。&#34; groupname&#34;从 &#34;公共&#34;&#34;组&#34; AS&#34; Extent1&#34;在哪里&#34; Extent1&#34;。&#34; eventid&#34; = @ p__linq__0
关闭连接时间为9/26/2017 8:35:32 AM -04:00
我无法确定发生这种情况的原因,以及我的代码中的哪些内容可以更改为允许这些多个查询按预期工作。
感谢您提供的任何见解。