Я новичок в EF и пытаюсь работать с отношениями «многие ко многим».

У меня есть таблица разработчиков и таблица приложений.

У каждого разработчика может быть много приложений, и у каждого приложения может быть много разработчиков.

Я пытался следовать примерам на StackOverflow, где упоминается о прикреплении, но я пробовал все, и он по-прежнему создает дублирующих разработчиков для приложения.

public class Developer 
    {
        public int DeveloperId { get; set; }
        [Required]
        public string DeveloperName { get; set; }
        public virtual List<Application> Applications { get; set; }
    }

public class Application 
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public string Description { get; set; }
        public string Note { get; set; }
        public Developer Owner { get; set;}
        public virtual List<Developer> Developers { get; set; }
    }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            modelBuilder.Entity<Developer>()
                .HasMany<Application>(d => d.Applications)
                .WithMany(a => a.Developers)
                .Map(ad =>
                {
                    ad.MapLeftKey("DeveloperRefId");
                    ad.MapRightKey("ApplicationRefId");
                    ad.ToTable("DeveloperApplication");
                });
        }

Выше описана моя установка. Я пробовал так много вещей, но каждый раз, когда добавляется новое приложение, EF создает нового разработчика, чтобы связать его с ним.

                context.Applications.Add(app);
                   // no matter what I try here I get a duplicate developer
                context.SaveChanges();
                return Ok(app.Id);

Любые предложения будут ценны! Спасибо!

0
Joseph 16 Фев 2018 в 22:36

1 ответ

Лучший ответ

Изменить:

public class Application 
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Description { get; set; }
    public string Note { get; set; }
    public Developer Owner { get; set;}
}

Кому:

public class Application 
{
    private List<Developer> _Developers; 
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Description { get; set; }
    public string Note { get; set; }

    [Required(ErrorMessage="The Id Of Owner(owner as a developer) is Required")]
    public int DeveloperId { get; set; } 

    [ForeignKey("DeveloperId")]
    public virtual Developer Owner { get; set;}


    public virtual List<Developer> Developers { get{return _Developers;}} // This create Many to many

    public application(){
        _Developers= new List<Developer>();
    }
}
1
henoc salinas 16 Фев 2018 в 23:01