Добавление объекта без извлечения - PullRequest
0 голосов
/ 05 декабря 2018

Имея следующие сущности:

[Table("School")]
public class SchoolEntity
{
    public SchoolEntity()
    {
        Students = new HashSet<StudentEntity>();
    }


    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid Id { get; set; }

    [ForeignKey("SchoolId")]
    public virtual ICollection<StudentEntity> Students { get; set; }
}

[Table("Student")]
public class StudentEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid Id { get; set; }

    [Required]
    public SchoolEntity School { get; set; }
}


        modelBuilder.Entity<SchoolEntity>()
            .HasMany(e => e.Students)
            .WithOne(e => e.School)
            .IsRequired();

Как добавить нового ученика без извлечения родителя, я перепробовал все виды комбинаций, но ученик не вставляется:

    public async Task AddAsync(IList<ParameterDataEntity> entities, Guid schoolId, CancellationToken token)
    {
        var school = new School { Id = schoolId };

        DbContext.Schools.Attach(school);

        foreach (var entity in entities)
        {
            entity.School = school;

            DbContext.Students.Add(entity);
            DbContext.Entry(entity).State = EntityState.Added;
        }

        await DbContext.SaveChangesAsync(token);
    }



    public async Task AddAsync(IList<ParameterDataEntity> entities, Guid schoolId, CancellationToken token)
    {
        var school = new School { Id = schoolId };

        DbContext.Schools.Attach(school);

        foreach (var entity in entities)
        {
            entity.School = school;

            DbContext.Students.Add(entity);
        }

        await DbContext.SaveChangesAsync(token);
    }

Спасибо

1 Ответ

0 голосов
/ 05 декабря 2018

Попробуйте добавить свойство SchoolEntityId в StudentEntity и назначить его при добавлении студентов.

[Table("Student")]
public class StudentEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid Id { get; set; }

    public Guid SchoolEntityId {get; set; }

    [Required]
    public SchoolEntity School { get; set; }
}

И:

public async Task AddAsync(IList<ParameterDataEntity> entities, Guid schoolId, CancellationToken token)
{    
    foreach (var entity in entities)
    {
        entity.SchoolEntityId = schoolId;
        DbContext.Students.Add(entity);
    }

    await DbContext.SaveChangesAsync(token);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...