EntityFramework Naivigational Property с составным ключом - PullRequest
0 голосов
/ 09 января 2020

Я ищу, чтобы получить некоторые дополнительные данные при поиске некоторых объектов. Вот где я до сих пор.

Таблица деталей будет иметь одну и ту же деталь много раз (несколько наборов), и когда я пытаюсь применить миграцию, я получаю ошибку с HasForeignKey (e => new {e .Number, e.ColorId}); как это не уникально. Есть ли другой способ сделать это?

Редактировать: мне не нужно добавлять запись "MyPart" при добавлении набора.

// Tables

    public class Set
    {
        public int Id { get; set; }
        public string Number { get; set; }
        public string Name { get; set; }
        public int NumberOfParts { get; set; }

        public IList<Part> Parts 
    }

    public class Part
    {
        public int Id { get; set; }
        public string Number { get; set; }
        public int ColorId { get; set; }
        public int Quantity { get; set; }

        public Set Set { get; set; }        
    }

    public class MyParts
    {
        public int Id { get; set; }
        public string Number { get; set; }
        public int ColorId { get; set; }
        public int Quantity { get; set; }   
        public string Location { get; set; }
    }

    / Repo Method
    public async Task<Set> GetSetAsync(string number, CancellationToken cancellationToken = default)        
    {
        //My Call to get the data
        var set = await Get<Set>()  
            Where(s => s.Number == number)
            .Include(x => x.Parts)
            .SingleOrDefaultAsync(cancellationToken);

        return set;
    }

Я хочу получить MyParts.Location и MyParts.Quantity в составе GetSetAsyn c ()

Я добавил этот

    modelBuilder.Entity<Part>()
                .HasOptional(e => e.MyPart) // I may not have the part
                .WithOne()
                .HasForeignKey(e => new { e.Number, e.ColorId });  

Требуемый запрос

    Select  set.*,
            part.*
            myParts.Location,
            myParts.Quantity
    FROM    Set set
    INNER JOIN Part part on set.Id = part.setId
    LEFT JOIN MyParts myParts on my Parts.ColorId = part.ColorId and myParts.Number = part.Number

Заранее спасибо

...