EF 7 beta 6: entità con una o più relazioni in EF 7

c# entity-framework entity-framework-core

Domanda

Ho un modello molto semplice:

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }
}

OnModelCreating del mio contesto (in EF 6 ) è qualcosa del tipo:

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }
}

Per quanto posso dire, non esiste un modo equivalente per farlo. So che le eliminazioni a cascata non sono supportate . Tuttavia, mi stavo chiedendo, qual è il modo migliore per modellare le relazioni da uno a molti come definito nel mio esempio di codice? Sembra che tutto ciò sia andato (o debba ancora essere implementato).

Ho visto un esempio ( qui ) di un DbContext esattamente come voglio, ma in realtà è sbagliato e non funziona. Se provo a tirare giù quel codice sorgente, a configurare il mio ambiente e a fare un salvataggio su un'entità blog con post, quei post non vengono salvati come si potrebbe immaginare.

Ci sono soluzioni alternative per questo?

Risposta accettata

Aggiornamento : questa risposta è stata scritta per EF7 beta7. Le API sono cambiate da allora. Vedi http://docs.efproject.net/en/latest/modeling/relationships.html per le ultime informazioni sull'utilizzo di EF Core.

Risposta originale

In EF 7, è possibile configurare da una a molte relazioni nel metodo OnModelCreating. Perché ciò funzioni, aggiungi una proprietà a RandomThing per rappresentare la chiave di assegnazione e anche un riferimento CLR al tipo genitore.

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public Bag Bag { get; set; }
    public int BagId { get; set; }
}

Nel tuo contesto, configura la relazione con la seguente configurazione:

class Bag
{
    public int Id { get; set; }
    public ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public Bag Bag { get; set; }
    public int BagId { get; set; }
}

Nota a margine : quando EF 7 prevede di aggiungere il supporto per la configurazione di questo tramite attributi.


Risposta popolare

anche se non ho usato affatto l'EF7, in EF6 renderei i tuoi modelli così:

class Bag
{
    public int Id { get; set; }
    public virtual ICollection<RandomThing> RandomThings { get; set; }
}

class RandomThing
{
    public int Id { get; set; }
    public String Description{ get; set; }

    public int BagId {get; set;}
    [ForeignKey("BagId")]
    Public Bag Bag {get; set;}
}

in questo modo la relazione viene gestita con annotazioni di dati e non è necessario il model builder per questa specifica attività




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é