C# EntityFramework Include 引用及其引用,如何?

我正在使用 .NET Core 2.0


我有 3 个模型:


class ModelA {

    [Key]

    public int ID { get; set; }

    public List<ModelB> Emails { get; set; }

}


class ModelB {

    [Key]

    public int ID { get; set; }

    public string Name { get; set; }

    public int RequestId { get; set; }

    public ModelA Request { get; set; }

    public List<ModelC> Tokens { get; set; }

}


class ModelC {

    [Key]

    public int ID { get; set; }

    public string Token { get; set; }

    public int Status { get; set; }


    public string getStatusName()

    {

        string[] Statuses = new string[] {

            "Created",      // 0

            "Approved",     // 1

            "Rejected"      // 2

        };


        return Statuses[Status];

    }

}

我也有这样创建的上下文:


public class RequestorContext : DbContext

{

    public DbSet<ModelA> Request { get; set; }

    public DbSet<ModelB> Email { get; set; }

    public DbSet<ModelC> Token { get; set; }


    public RequestorContext(DbContextOptions<RequestorContext> options) : base(options)

    {


    }


    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

    }

}

现在我想在控制器中做这样的事情:


var request = await _context.Request

                .Include(r => r.Emails) //also include tokens - how ???

                .SingleOrDefaultAsync(r => r.Id == id);

那么基本上如何在电子邮件中包含相应的令牌? 为了能够在视图中做这样的事情:


@foreach (var email in Model.Emails)

{

    <tr>

        <td>@email.Name</td>

        <td>@email.Token.Token</td>

        <td>@email.Token.getStatusName()</td>

    </tr>

}

目前我收到这样的错误:


RuntimeBinderException:无法对空引用执行运行时绑定 CallSite.Target(Closure , CallSite , object ) System.Dynamic.UpdateDelegates.UpdateAndExecute1(CallSite site, T0 arg0) AspNetCore._Views_Requestor_Details_cshtml+d__8.MoveNext() in Details.cshtml + @email .Token.getStatusName()


吃鸡游戏
浏览 306回答 1
1回答

胡说叔叔

要加载相关数据使用多层次ThenInclude的记录在这里。要解决您的问题,您的代码将如下所示:var&nbsp;request&nbsp;=&nbsp;await&nbsp;_context.Request &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Include(r&nbsp;=>&nbsp;r.Emails) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ThenInclude(e&nbsp;=>&nbsp;e.Tokens) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.SingleOrDefaultAsync(r&nbsp;=>&nbsp;r.Id&nbsp;==&nbsp;id);
打开App,查看更多内容
随时随地看视频慕课网APP