C# Entity Framework 6 mit Vererbung

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.074
Hallo,

ich habe ein Problem und zwar, wenn ich versuche an mehrere Entities eine Assoziation zu vererben. Ich möchte eine Datenbank mittels Code First erstellen lassen. Dafür nutze ich Entity Framework 6 mit EDMX Datei. Ich möchte mit TPC (Table per Concret Type) arbeiten. Die Tabellen werden mit dieser Methode erstellt.

Code:
        private System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<TEntity> RegisterEntity<TEntity>(System.Data.Entity.DbModelBuilder modelBuilder, String schemaName)
            where TEntity : class
        {
            
            return modelBuilder.Entity<TEntity>().Map(m=>
                {
                    m.MapInheritedProperties();
                    m.ToTable(typeof(TEntity).Name, schemaName);
                });
        }
Vorher überschreibe ich im DbContext die OnModelCreating Methode...


entity.jpg

Entity "A, B und C" sollen das Adressverzeichnis miterben, das eigentlich eine Abstrakte Klasse gehört.

Leider bekomme ich immer wieder die Fehlermeldung:
Die DAL.Tests.MkdDALContainerTests.MkdDALContainer_GenerateDB_Test-Testmethode hat eine Ausnahme ausgelöst:
System.Data.Entity.ModelConfiguration.ModelValidationException: One or more validation errors were detected during model generation:

AdressVerzeichnisId: : There is no property with name 'AdressVerzeichnisId' defined in the type referred to by Role 'EmptyEntityBaseSelf'.

EmptyEntityBase ist die Abstrakte Klasse mit der Assoziation für Adressverzeichnis.

Ich habe schon versucht die Fremdschlüssel manuell zu mappen mit

Code:
this.RegisterEntity<A>(modelBuilder, CurrentSchema).HasRequired(a => a.AdressVerzeichnis).WithMany().HasForeignKey(a => a.AdressVerzeichnisId).WillCascadeOnDelete(false);

Leider funktioniert das alles nicht. Hat jemand vielleicht mehr Erfahrung mit EF?

Übrigns, finde ich in VS 2013 keine Möglichkeit den Database generator Workflow auf etwas anderes als TPT umzustellen. Daher muss ich OnModelCreating überscheiben. Kennt jemand das Problem und die Lösung dazu?
 
Hi
hatte das Problem auch mal.

Wie du schon richtig erkannt hast weint er rum wegen den "Verbindungen" zwischen den Tabellen. In deinem Fall der Assoziationen,
ich weiß leider nicht wie das mit EF 6 ist. Ich hatte es damals mit EF 5 gehabt, d.h bei dem Problem konnte ich das einfach mit "sql management studio" lösen.
Auf die DB connected und die Entitäten von Hand miteinander verknüpft.
Hoffe das bringt dich weiter..., jedoch wäre das dann nicht mehr der Code First Ansatz.
 
oh je,

das Problem lag an eine nicht registrierte Entität. Diese sollte eigentlich als Abstrakt agieren, wurde aber nicht als Abstrakt gesetzt. Bei Table per Concrete Type Strategie erwartet der Model Builder, dass alle Entätiten registriert sind (oder können auch auf Ignorierliste gesetzt werden). Diese eine Entität war auch nicht registriert oder ignoriert. Daher kam ich an den anderen Stellen nicht weiter.

Dieses Validierungsfehler hatte nicht mit dem Problem zutun!
 
Zuletzt bearbeitet:
Zurück
Oben