EF7 beta5: Erreur lors de la tentative d'insertion d'une entité enfant

asp.net-core c# entity-framework-core

Question

J'ai créé une API utilisant ASP.NET5 et Entity Framework 7.0.0-beta 5.

J'ai le modèle, DbContext et le référentiel créés comme décrit ici , et lorsque j'essaie d'insérer des données avec une entité enfant, mon application lève une exception:

"Impossible d'insérer la valeur NULL dans la colonne 'Statut', table 'Société'; la colonne n'autorise pas les valeurs nulles. INSERT échoue."

Code + exception

L'attribut Status n'est pas nul dans mon entité Company, mais je ne sais pas pourquoi EF n'est pas capable d'insérer la valeur de l'entité enfant. (dans ce cas, "1")

C'est la trace de la pile:

   at Microsoft.Data.Entity.Relational.Update.ReaderModificationCommandBatch.Execute(RelationalTransaction transaction, IRelationalTypeMapper typeMapper, DbContext context, ILogger logger)
   at Microsoft.Data.Entity.Relational.Update.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
   at Microsoft.Data.Entity.Relational.RelationalDataStore.SaveChanges(IReadOnlyList`1 entries)
   at Microsoft.Data.Entity.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1 entriesToSave)
   at Microsoft.Data.Entity.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
   at Microsoft.Data.Entity.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
   at Microsoft.Data.Entity.DbContext.SaveChanges()
   at **.Data.Repositories.CompanyRepository.Create(Company company) in D:\**.Data\Repositories\CompanyRepository.cs:line 36
   at **.API.Controllers.CompanyController.Create(Company company) in D:\**.API\Controllers\CompanyController.cs:line 48

Voici le code:

DbContext

public class MrBellhopContext : DbContext
{

    public DbSet<Company> Company { get; set; }
    public DbSet<CompanyStatus> CompanyStatus { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Company>().Table("Company");
        modelBuilder.Entity<Company>().Key(c => c.CompanyId);
        modelBuilder.Entity<Company>().Index(c => c.Name);
        modelBuilder.Entity<Company>().Reference(c => c.Status).InverseReference().ForeignKey<CompanyStatus>(cs => cs.StatusId);

        modelBuilder.Entity<CompanyStatus>().Table("CompanyStatus");
        modelBuilder.Entity<CompanyStatus>().Key(cs => cs.StatusId);

        base.OnModelCreating(modelBuilder);
    }

}

Modèle

public class Company
{

    public int CompanyId { get; set; }

    public string Name { get; set; }

    public string Email { get; set; }

    public CompanyStatus Status { get; set; }

    public DateTime CreatedAt { get; set; }

    public DateTime UpdatedAt { get; set; }

}

public class CompanyStatus
{

    public int StatusId { get; set; }

    public string Name { get; set; }

}

Référentiel (méthode create uniquement)

    public int Create(Company company)
    {
        _dbcontext.Add(company);
        _dbcontext.SaveChanges();

        return company.CompanyId;
    }

Est-ce que quelqu'un sait comment insérer correctement des entités enfant?

Réponse populaire

Dans EF7, vous devez associer votre objet enfant au contexte. C'est différent de EF6, et je suis à peu près sûr que c'est le scénario auquel vous faites face. Essayez d’attacher l’objet à dbcontext avant de l’enregistrer.

m'est arrivé, consultez ce numéro: https://github.com/aspnet/EntityFramework/issues/2387 pour plus d'informations.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi