2016-05-17 5 views
4

Ich habe dieses Objekt Karte für Entity Framework:Wie kann ich EF bei dem Versuch stoppen, eine berechnete Spalte für SQL Server zu aktualisieren?

public WordDefinitionMap(string schema) 
{ 
    ToTable(schema + ".WordDefinition"); 
    HasKey(x => x.WordDefinitionId); 

    Property(x => x.WordDefinitionId).HasColumnName(@"WordDefinitionId").IsRequired().HasColumnType("int").HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); 
    Property(x => x.WordFormId).HasColumnName(@"WordFormId").IsRequired().IsUnicode(false).HasColumnType("varchar").HasMaxLength(20); 
    Property(x => x.Ascii).HasColumnName(@"Ascii").IsOptional().HasColumnType("int").HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed); 

    // Foreign keys 
    HasRequired(a => a.WordForm).WithMany(b => b.WordDefinitions).HasForeignKey(c => c.WordFormId); // FK_WordDefinitionWordForm 
} 

public class WordDefinition 
{ 
    public int WordDefinitionId { get; set; } // WordDefinitionId (Primary key) 
    public string WordFormId { get; set; } // WordFormId (length: 20) 
    public int? Ascii { get; set; } // Ascii 

    // Foreign keys 
    public virtual WordForm WordForm { get; set; } // FK_WordDefinitionWordForm 
} 

Wenn verwende ich Entity Framework zu versuchen, dieses Objekt zu aktualisieren ich eine Ausnahme bin immer sagen:

The column "Ascii" cannot be modified because it is either a computed column or is the result of a UNION operator. 

Ich dachte, ich war schon EF anweist diese Eigenschaft zu ignorieren, aber es scheint, es versucht immer noch, es zu aktualisieren, obwohl es null ist. Gibt es eine Möglichkeit, wie ich das Mapping so ändern kann EF nicht diese Eigenschaft gesetzt?

+0

Dann sollte ich nur die folgende Konfiguration entfernen 'HasDatabaseGeneratedOption (System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed);' auf Ascii-Konfiguration – CodeNotFound

+0

Ist das nicht die Anweisung, die sagt (oder sollte sagen) EF nicht zu berühren diese Spalte? Du schlägst vor, ich entferne das und womit würde ich es ersetzen? Danke –

+0

Weil Accii-Eigenschaft kein Primärschlüssel ist. EF wird diese Immobilie als nicht generierte Immobilie betrachten. – CodeNotFound

Antwort

4

Die Ausnahmebedingungsnachricht weist darauf hin, dass Ihre fließende Konfiguration vom Framework vollständig ignoriert wird, da an Ihrem Code nichts falsch ist.

Entity Framework ordnet dann Ihre Eigenschaften mithilfe der Standardkonvention zu, ohne zu wissen, dass Ascii eine berechnete Eigenschaft ist.

das Problem Prüfung zu beheben, dass eine Instanz Ihrer WordDefinitionMap Klasse erstellt wird und auf die Modelbuilder hinzugefügt:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configurations.Add(new WordDefinitionMap("mySchema")); 
    //other mappings 
} 

Wie beiseite ein: Ich würde Ihnen vorschlagen, Ihre berechnete Eigenschaft nicht beschreibbar, indem seine Setter zu machen private:

public int? Ascii { get; private set; } // Ascii 

Dies diese Eigenschaft fälschlicherweise vermeiden Einstellung während EF es ohne Probleme aus der Datenbank füllen wird fortgesetzt.

Verwandte Themen