2016-06-29 17 views
0

Ich versuche Tabellennamen in Modell so zu konfigurieren, dass jede Tabelle durch Enthalten Namespace mit diesem Code genannt Schema gehört:Entity Framework + Fluent Leichte Konfiguration für Entitätstypen nur

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder)); 

    foreach (var creator in ModelCreators) 
    { 
     creator.OnModelCreating(modelBuilder); 
    } 
    modelBuilder.Types().Configure(c => c.ToTable(PrefixNamespace(c.ClrType))); 
} 

private string PrefixNamespace(Type type) 
{ 
    var result = $"{type.Namespace.Split('.').Last()}.{type.Name}"; 
    return result; 
} 

Das Problem ist, dass diese Anwendung Die Konfiguration wirkt sich auch auf ComplexTypes aus, die dann als Entitäten konfiguriert werden. Wie kann diese Konfiguration nur auf Entitäten angewendet werden? Die modelBuilder.Entity<TEntity>(TEntity entity) kann nur eine Entität zu der Zeit konfigurieren, aber nicht alle Entitätstypen sind während der Erstellung bekannt, einige werden aus .dlls erkannt.

Ich dachte an so etwas wie

modelBuilder.Types().Where(t => IsNotComplexType(t)).Configure(...) 

aber ich weiß nicht, wie IsNotComplexType Form verfügbare Objekte zu implementieren.

Antwort

0

Ich kam zu der Schlussfolgerung, dass komplexe Typen explizit über DbModelBuilder.ComplexType<TComplexType>() eingerichtet werden müssen, so dass es nach der Anwendung der ToTable(string tableName)-Methode nicht in eine Entität umgewandelt wird.