实体框架6(代码优先)使用子集合外键而没有父父键

时间:2017-05-05 13:49:19

标签: entity-framework entity-framework-6 asp.net-web-api2

我真的觉得我在这里错过了一些可能非常简单的事情,但我并没有跳出来。

我有这些对象,我正在尝试将父对象加入子集合,但不一定使用父的主键。在sql中我可以很容易地做到这一点,但它让我烦恼为什么首先使用代码不会发生这种情况。我试图通过ErpSkuId将CompetitorMatchInformation加入BrandSkuPricing。

public class CompetitorMatchInformation {
    [Key(), Column("MatchId")]
    public long MatchId { get; set; }

    [Column("ErpSkuId")]
    public int? ErpSkuId { get; set; }

    [Column("CompetitorId")]
    public int CompetitorId { get; set; }

    [ForeignKey("CompetitorId")]
    public virtual Competitors Competitor { get; set; }

    [ForeignKey("CompetitorItemToErpSkuMatchId")]
    //[ForeignKey("ErpSkuId")]
    public virtual List<BrandSkuPricing> BrandSkuPricing { get; set; }
}

public class Competitors
{
    [Key(), Column("CompetitorId")]
    public int CompetitorId { get; set; }
    [Column("CompetitorName")]
    public string CompetitorName { get; set; }
}

public class BrandSkuPricing
{
    [Key(), Column("BrandSkuId")]
    public int BrandSkuId { get; set; }

    [Column("CompetitorItemToErpSkuMatchId")]
    public long CompetitorItemToErpSkuMatchId { get; set; }

    [Column("ErpSkuId")]
    public int? ErpSkuId { get; set; }

    [Column("Price")]
    public decimal? Price { get; set; }

    [Column("BrandId")]
    public int? BrandId { get; set; }

    [Column("BrandSourceSytemId")]
    public string BrandSourceSytemId { get; set; }

    [Column("BrandName")]
    public string BrandName { get; set; }

    [Column("BrandSkuNumber")]
    public string BrandSkuNumber { get; set; }
}

竞争对手正确地过来了,但是孩子的收藏并没有那么多。这不是我所知道的正常情景,但BrandSkuPricing的基本观点之间的关系并不完全正常。

我正在使用的查询是

public List<CompetitorMatchInformation> GetCompetitorMatchInfoByCompetitorItemId(long competitorItemId, int? brandId = null)
{
    var query = this.Entity.Include(x => x.CurrentChallenges).Include(x => x.BrandSkuPricing);
    var list = query.Where(x => x.CompetitorItemId == competitorItemId &&
                          ((x.CurrentChallenges.Count > 0 && x.CurrentChallenges.Any(w => !w.IsResolved)) ||
                            x.CurrentChallenges.Count == 0))
                .ToList();
    list.ForEach(l =>
    {
        if (brandId.HasValue)
        {
            l.BrandSkuPricing = l.BrandSkuPricing.Where(x => x.BrandId == brandId).ToList();
        }
    });

    return list;
}   

在模型构建器中,我什么都没有。我已经尝试过,但即使在建设者中也无法让它工作。无论如何,我可以让孩子集合加入ErpSkuId?我已经改变了底层视图以引入CompetitorItemToErpSkuMatchId,因此它以这种方式工作,但这种加入不是关键字的方案很快就会出现在我身上。

谢谢!

0 个答案:

没有答案