2010-01-01 18 views
25

Ich möchte eine benutzerdefinierte Eigenschaft für eine meiner Entitäten erstellen, die aus der Datenbank zugeordnet wurden. Diese Eigenschaft ist jedoch nicht der Datenbank zugeordnet. Ich habe die Eigenschaft jedoch mit partiellen Klassen erstellt Beim Versuch, zu kompilieren, erhalte ich eine Fehlermeldung, dass die Eigenschaft nicht zugeordnet ist. Gibt es ein Attribut oder etwas, das ich hinzufügen sollte? Danke im Voraus.Erstellen einer nicht zugeordneten Eigenschaft in einer Entität (Entitätsframework)

+3

Die Verwendung von partiellen Klassen ist der richtige Weg, und funktioniert gut für mich. Sie müssen Ihren Code, Ihre Mappings und den genauen Fehler anzeigen, da das, was Sie bisher beschrieben haben, bereits funktioniert. –

Antwort

7

Verwenden Sie partielle Klassen, um die hinzuzufügenden Eigenschaften oder Methoden hinzuzufügen. Z.B.

namespace WhateverNamespaceYourEntityModelIsIn 
{ 
    public partial class TheNameOfYourEntity 
    { 
      public string MyNewProperty { get; set; } 
    } 
} 

und das sollte Sie tun.

+0

Wenn Sie mit Code First befassen, lesen Sie weiter unten – bkwdesign

+1

Dies ist die falsche Antwort im Falle von Code First – Toolkit

+0

Für Code Zuerst finden Sie Kniganapolkes Antwort speziell. Verwenden Sie [NotMapped]. –

69

Sie können auch Ihre Eigenschaft mit [NotMapped] Attribut oder verwenden Sie Ignore Methode von fließenden API.

Immobilien

public class EntityName 
{ 
    [NotMapped] 
    private string PropertyName { get; } 
} 

Fluent API

public class Entities : DbContext 
{ 
    public DbSet<EntityType> Users { get; set; } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Some database configuration 
     modelBuilder.Entity<EntityType>() 
      .Ignore(i => i.PropertyName); 
    } 
} 
+0

Dies ist eine gute Lösung, wenn Sie dem Entitätsobjekt Eigenschaften hinzufügen möchten, diese jedoch nicht der Datenbank oder Mapping-Datei zuordnen möchten. – mknopf

+0

Das Verwenden des [NotMapped] -Attributs ist der einfachste Weg, wenn Sie eine Eigenschaft besitzen all enites wie EntityState, die Sie für eine Basisklasse deklarieren. Sie müssen nicht jede Konfigurationsklasse bearbeiten und sich daran jedes Mal erinnern, wenn eine neue Entität eingeführt wird. –

+0

Hey, danke für deine Antwort. Aber wenn ich es versuche, bekomme ich: "Unterstützt nicht typisierten Wert in nicht offenen Typ." Was mache ich falsch? – Toodoo

1

ich ernsthaft zu spät, um das Gespräch bin, aber Sie wollen auch die teilweise als serialisierbar und die Eigenschaft als serialisierbar markieren - Wenn Sie JSON planen oder die Objekte serialisieren möchten:

[Serializable()] 
public partial class MyClass { 
    private System.Nullable<int> _Age; 
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 4)] 
    public System.Nullable<int> Age { 
      ... 
    } 
} 

Die Anweisungen [Serializable()] und [global:] werden benötigt. Wenn Sie [global:] ausschlossen, wurde es bei jeder Serialisierung ignoriert und nicht in die Serialisierung einbezogen.

+0

Ausgezeichnet! Ich drehte meine Räder so lange und versuchte herauszufinden, warum nur eine meiner geposteten Variablen immer Null war. Das hat den Trick gemacht! Vielen Dank! – RobDigital

0

Diese Seite hat mir wirklich geholfen. Ich füge genau das hinzu, was ich meiner Mapping-Konfiguration hinzugefügt habe, nachdem ich Kniganapolkes Antwort gesehen habe.

public TheObjectName() 
    { 
     this.HasKey(t => t.ID); 
     this.Ignore(t => t.IsProcess); //we don't want EF to worry about this 
    } 

Danke allen, danke SO!

Verwandte Themen