Domanda

Utilizzando EF 4.0 codice solo Voglio fare un assocation tra una classe astratta e normale.

Ho classe 'voce', 'contentbase' e 'Test'.

'contentbase' è astratta e 'Test' deriva da esso.

'contentbase' ha una proprietà 'voce' che si collega a un caso di 'voce'.

In modo che 'Test.Item' o qualsiasi classe che deriva da 'contentbase' ha una proprietà di navigazione 'Item'.

Nel mio DB ogni record per test ha un record corrispondente per la voce.


public class Item
{
    public int Id { get; set;}
}

public abstract class ContentBase
{
    public int ContentId { get; set;}
    public int Id { get; set;}

    public Item Item { get; set;}
}

public class Test : ContentBase
{
    public string Name { get; set;}
}

ora qualche codice init

public void SomeInitFunction()
{

    var itemConfig = new EntityConfiguration<Item>();
    itemConfig.HasKey(p => p.Id);
    itemConfig.Property(p => p.Id).IsIdentity();
    this.ContextBuilder.Configurations.Add(itemConfig);

    var testConfig = new EntityConfiguration<Test>();
    testConfig.HasKey(p => p.ContentId);
    testConfig.Property(p => p.ContentId).IsIdentity();

    // the problem 
    testConfig.Relationship(p => p.Item).HasConstraint((p, q) => p.Id == q.Id);

    this.ContextBuilder.Configurations.Add(testConfig);  
}

Questo dà un errore: Una chiave è registrato per il tipo derivato 'Test'. Le chiavi devono essere registrati per il tipo di root 'contentbase'.

comunque provo ottengo un errore. Che cosa sono io a fare il male?

È stato utile?

Soluzione

Conclusione finora:. Non è possibile

Altri suggerimenti

Prova a un'entità suppertype per ridichiarare il vostro rapporto:

In contentbase: pubblico virtuale Voce Voce {get; set;}

In prova: pubblica nuova Voce Voce {get; set;}

Questa compilato nel mio progetto di test, ma non ho la prova ulteriormente. Solo per il momento, EF5 wheb o comeso finale

La struttura di navigazione: L'articolo è definire il livello di tipo di base, in modo che il modello è a conoscenza del tipo di base - è possibile aggiungere proprietà alla classe di test che passano la proprietà Item e mappa nel vostro rapporto:

public class Test : ContentBase
{
    public string Name { get; set;}
    public string TestItem { get {return Item;} ...

}

testConfig.Relationship(p => p.TestItem )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top