2015-06-04 6 views
9

Dies ist ähnlich wie Fragen here und here, aber die sind alt und haben keine guten Antworten.Entity Framework Code zuerst: Wie Klassen zu ignorieren

Lassen Sie uns sagen, dass ich die folgenden Klassen:

class HairCutStyle { 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

class CustomerHairCutPreference { 
    public int ID { get; set; } 
    public Customer Customer { get; set; } 
    public HairCutStyle HairCutStyle { get; set; } 
} 

sagen Lassen Sie meine HairCutStyle Daten in einer Tabelle in einer anderen Datenbank gespeichert ist (ich es von Paul Mitchell bekommen selbst). Ich möchte die HairCutStyle-Klasse als eine POCO-Klasse verwenden - etwas, das ich im Code verwenden werde, um Haarschnitt-Stile darzustellen, aber ich muss diese Informationen nicht in meiner Datenbank lesen/schreiben. (Angenommen, ich habe einen separaten Service-Layer, der die Daten für diese Klassen aus der anderen Datenbank auffüllen kann.)

Wie kann ich EF mitteilen, KEINE HairCutStyle-Tabelle in meinem aktuellen Db-Kontext zu erstellen? Gleichzeitig möchte ich jedoch einen Wert in der CustomerHairCutPreference-Tabelle speichern, der ein Verweis auf die an anderer Stelle gespeicherten HairCutStyle-Daten ist. Ein "virtueller" Fremdschlüssel der Art, der nicht durch eine tatsächliche Datenbank-FK-Einschränkung eingeschränkt ist.

+2

Haben Sie versucht, es nicht zu Ihrer DbContext-Klasse hinzuzufügen? Das sollte bedeuten, dass EF die Datei nicht kennt. – krillgar

+2

Mögliches Duplikat. http://stackoverflow.com/questions/7642205/how-to-configure-ef-code-first-to-not-map-a-specific-type –

Antwort

5

Es gibt drei Dinge, um sicherzustellen:

  1. Achten Sie darauf, Sie setzen keinen DbSet<HairCutStyle> in Ihrem DbContext abgeleiteten Klasse
  2. Achten Sie darauf, Sie haben keine Erwähnung von HairCutStyle in Ihrem OnModelCreating überschreiben
  3. Markieren Sie Ihre HairCutStyle Eigenschaft mit dem Attribut NotMapped.
18

eine Eigenschaft in CustomerHairCutPreference für HairCutSytleID hinzufügen und dann auf der HairCutStyle Eigenschaft das [NotMapped] Attribut verwenden. Beachten Sie jedoch, dass Sie dann dafür verantwortlich sind, dass die HairCutStyle und HairCutStyleID synchron bleiben.

class CustomerHairCutPreference { 
    public int ID { get; set; } 
    public Customer Customer { get; set; } 
    public int HairCutStyleID {get; set; } 

    [NotMapped] 
    public HairCutStyle HairCutStyle { get; set; } 
} 

Alternativ können Sie die FluentAPI verwenden HairCutStyle vollständig auszuschließen jemals von Entity Framework abgebildet werden, die nützlich sein können, wenn Sie mehrere Klassen, die auf sie verwiesen wird.

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    modelBuilder.Ignore<HairCutStyle>(); 
} 
Verwandte Themen