EF 4.0 Codice unico assocation dall'astratto al derivato
-
20-09-2019 - |
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?
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 )