尝试在实体框架中添加到父项时,我的子实体为null

时间:2019-11-28 01:15:31

标签: c# entity-framework .net-core entity-framework-core

我想向父母(“事宜”)添加一堆孩子(“要求”)。但是当我说以下话时:

matter.Claims.Add(claim);

我的Claims为空/空。

这是我的代码:

public async Task<bool> CreateClaims(AddClaimsDataDto claimParams) 
{
    Matter matter;

    matter = await _autoContext.Matters
                               .Where(m => m.MatterNumber == claimParams.Matter)
                               .FirstOrDefaultAsync();

    if (matter == null) 
    {
        matter = new Matter { MatterNumber = claimParams.Matter};
    }

    foreach(var trustName in claimParams.Names) 
    {
        var claim = new Claim();
        // fill claim properties here
        matter.Claims.Add(claim); // Claims is null here!
    }

    _autoContext.Matters.Add(matter);
    await _autoContext.SaveChangesAsync();

    return true;
}

还有我的Matter实体:

public class Matter
{
    public Matter()
    {
        CreatedDate = DateTime.Now;
        EditedDate = DateTime.Now;
    }

    public int Id { get; set; }
    public string MatterNumber { get; set; }
    public string InjuredPartyFirstName { get; set; }
    public string InjuredPartyLastName { get; set;}
    public ICollection<Claim> Claims { get; set; }
    public DateTime CreatedDate { get; set; }
    public string CreatedBy { get; set; }
    public DateTime EditedDate { get; set; }
    public string EditedBy { get; set; }
}

我的Claim实体:

public class Claim
{
    public Claim()
    {
        CreatedDate = DateTime.Now;
        EditedDate = DateTime.Now;
    }

    public int Id { get; set; }
    public int? ClaimNumber { get; set; }
    public Matter Matter { get; set; }
    public TrustGroup TrustGroup { get; set; } 
    public Attorney Attorney { get; set; }
    public User Contact { get; set; }
    public Status ClaimStatus { get; set; }
    public DateTime DateAttorneyApproved { get; set; }
    public DateTime DateExported { get; set; }
    public ICollection<Injured> InjuredParty { get; set; }
    public DateTime CreatedDate { get; set; }
    public string CreatedBy { get; set; }
    public DateTime EditedDate { get; set; }
    public string EditedBy { get; set; }
}

1 个答案:

答案 0 :(得分:2)

如果要更新实体框架子级列表,则必须急于或延迟加载它,然后再进行更改。参见Loading Related Data

如果此问题为空,还必须初始化Claims属性。

using Microsoft.EntityFrameworkCore;

public async Task<bool> CreateClaims(AddClaimsDataDto claimParams)
{
    Matter matter;

    matter = await _autoContext.Matters
        .Include(m => m.Claims)                             //Using eager loading here
        .Where(m => m.MatterNumber == claimParams.Matter)
        .FirstOrDefaultAsync();

    if (matter == null) 
    {
        matter = new Matter 
        { 
            MatterNumber = claimParams,
            Claims = new List<Claim>()                      //Initialize the list here
        };
    }

    foreach(var trustName in claimParams.Names) 
    {
        var claim = new Claim();
        matter.Claims.Add(claim);
    }

    _autoContext.Matters.Add(matter);
    await _autoContext.SaveChangesAsync();

    return true;
}
相关问题