Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net核心api中的返回集合_C#_Asp.net_.net_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# asp.net核心api中的返回集合

C# asp.net核心api中的返回集合,c#,asp.net,.net,asp.net-core,asp.net-core-mvc,C#,Asp.net,.net,Asp.net Core,Asp.net Core Mvc,我有一个带有ef核心的这些模型的小api public class AppUser : IdentityUser { public string FirstName { get; set; } public string LastName { get; set; } public string Company { get; set; } public ICollection<Account> Accounts { get; set; } } publ

我有一个带有ef核心的这些模型的小api

public class AppUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Company { get; set; }
    public ICollection<Account> Accounts { get; set; }
}

public class Account
{
    public int id { get; set; }
    public AppUser User { get; set; }
    public string AccountNumber { get; set; }
}
更新:所以我用dotnet命令行运行了这个应用程序,得到了

{"firstName":"Bill","lastName":"Johnson","serviceAccounts":[{"id":1,"camsUser":{"firstName":"Bill","lastName":"Johnson","company":null

如果子实体被设置为延迟加载,那么您应该获取帐户和用户作为

var user = await _appDbContext.Users.Include(u => u.Accounts).SingleAsync(c => c.Id == userId.Value); 

我是这样想的:

var userId = _caller.Claims.Single(c => c.Type == "id");
var user = await _appDbContext.Users.Include(s =>s.Accounts).SingleAsync(c => c.Id == userId.Value);
var accounts = user.Accounts.Select(a => new
        {
            a.AccountNumber,
            a.id
        });
return new OkObjectResult(new
        {
            user.FirstName,
            user.LastName,
            accounts
        }); 

您当前收到的响应是什么?您使用的是Ef Core吗?问题,如果您只是设置派生对象的值,为什么要定义用户属性?您只需将
user
作为要返回的对象传递给value即可?消费者可以浏览每个属性。对帐户使用Include。
user
对象是否包含帐户?如果不是,那么您应该将其作为fetch语句的一部分。这不再是必需的。@Nikolaus的确,事实上Visual Studio现在会要求您简化它。此答案的“如果子实体…”部分是OP问题的解决方案。它隐藏在与返回类型无关的东西中。我这样做了,VisualStudio显示了一个200成功响应,用户var有帐户信息,但是postman抛出errors@Valuator/Nikolaus-谢谢,如果声明匿名类型时没有道具名称,我不知道这一点。我已经更新了我的答案,只包含相关部分。再次感谢。我猜序列化Json.yep时是循环引用错误,就是这样。您可以尝试将
ReferenceLoopHandling.Ignore
添加到您的
Startup.cs
文件中,如下所述:为了避免像这样实例化单独的集合,结果可能会有所不同。
var user = await _appDbContext.Users.Include(u => u.Accounts).SingleAsync(c => c.Id == userId.Value); 
var userId = _caller.Claims.Single(c => c.Type == "id");
var user = await _appDbContext.Users.Include(s =>s.Accounts).SingleAsync(c => c.Id == userId.Value);
var accounts = user.Accounts.Select(a => new
        {
            a.AccountNumber,
            a.id
        });
return new OkObjectResult(new
        {
            user.FirstName,
            user.LastName,
            accounts
        });