EF7 relazioni One to One

c# entity-framework-core

Domanda

Al momento sto lavorando per gestire il nuovo EF7 e sto incontrando un comportamento strano quando si tratta di relazioni uno a uno.

Ho i seguenti modelli

public class Material
{
    [Key]
    [Required]
    [Column(TypeName = "bigint")]
    public long Id { get; set; }

    [Required]
    [MaxLength(128)]
    public string Name { get; set; }

    [Required]
    [MaxLength(512)]
    public string Description { get; set; }

    [Required]
    [Column(TypeName = "money")]
    public decimal CostPerUnit { get; set; }

    public virtual Unit UnitOfMeasure { get; set; }

    [Required]
    [Column(TypeName = "bit")]
    public bool IsActive { get; set; } = false;
}


public class Unit
{
    [Key]
    [Column(TypeName = "bigint")]
    public long Id { get; set; }

    [Required]
    [MaxLength(32)]
    public string Name { get; set; }

    [Required]
    [MaxLength(64)]
    public string Description { get; set; }

    [Required]
    public string Type { get; set; }
}

e sto costruendo le tabelle come segue:

 builder.Entity<Unit>().Key(u => u.Id);
builder.Entity<Unit>().Property(u => u.Name).MaxLength(64).Required();
builder.Entity<Unit>().Property(u => u.Description).Required();
builder.Entity<Unit>().Property(u => u.Type).Required();

builder.Entity<Material>().Key(m => m.Id);
builder.Entity<Material>().Property(m => m.Name).Required();
builder.Entity<Material>().Property(m => m.Description).Required();
builder.Entity<Material>().Property(m => m.CostPerUnit).Required();
builder.Entity<Material>().Property(m => m.IsActive).Required();

Il problema che sto avendo ora è che quando provo a cercare un materiale con un'unità di misura, l'unità di misura è sempre impostata su null, ma quando controllo le tabelle generate posso vedere chiaramente che la chiave esterna è effettivamente creato.

Ho anche tentato di forzare la relazione nella creazione di OnModel, tuttavia non riesco ancora a recuperare l'oggetto unitario.

builder.Entity<Material>().Reference(m => m.UnitOfMeasure).InverseReference().ForeignKey<Unit>(u => 

Come dovrei aggiungere questo riferimento o è ancora supportato?

Risposta accettata

Come stai cercando di ottenere il riferimento? Il caricamento lento a questo punto non funziona in EF7. Dovrai fare il caricamento bisognoso (dbContext.Materials.Include (m => m.UnitOfMeasure)) o la versione esplicita di quello.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché