5

Mam klasę o nazwie Klient zmapowany do tabeli bazy danych przy użyciu kodu Entity Framework. Tabela zawiera pole obliczeniowe, które musi być dostępne w mojej klasie klienta, ale rozumiem, że nie będzie można pisać w tym polu. Czy istnieje sposób na skonfigurowanie architektury Entity do zignorowania właściwości podczas zapisywania, ale uwzględnienie tej właściwości podczas czytania?Kod struktury obiektu Najpierw - Jak zignorować kolumnę podczas zapisywania

Próbowałem użyć metody Ignore w mojej klasie konfiguracji lub przy użyciu atrybutu [NotMapped], ale uniemożliwiają one odczytanie właściwości z bazy danych.

nieruchomość

Odpowiedz

9

Można użyć DatabaseGeneratedAttribute z DatabaseGeneratedOption.Computed opcji:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
public ComputedPropertyType ComputedProperty { get; set; } 

lub jeśli wolisz biegle API można użyć HasDatabaseGeneratedOption metodę w swojej klasie DbContext:

public class EntitiesContext : DbContext 
{ 
    public DbSet<EntityType> Enities { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<EntityType>().Property(e => e.ComputedProperty).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 
    } 
} 
+1

Dzięki, to wydaje się być odpowiedź. Ponieważ jednak używam mojej wyliczonej właściwości jako odwołania do klucza obcego do innej tabeli, otrzymuję teraz "Właściwość zależna w ReferentialConstraint jest odwzorowana na kolumnę generowaną przez sklep". Czy nie będzie można używać go jako odniesienia do klucza obcego? –

+0

@ EasyTimer Szczerze trudno mi sobie wyobrazić taki scenariusz. Z punktu widzenia EF nie jest to możliwe, ponieważ EF musi mieć możliwość aktualizacji klucza obcego, jeśli zmieni się odniesienie w aplikacji. Być może w twoim przypadku (ponieważ nie znam twoich dokładnych wymagań) wystarczy posiadanie tylko właściwości nawigacji, zajrzyj tutaj: http://stackoverflow.com/questions/5691780/navigation-property-without-declaring-foreign klucz – tpeczek

+0

Rozwiązałem mój problem dzieląc moje zajęcia na dwie części, jak w tym artykule http://weblogs.asp.net/manavi/archive/2011/04/24/associations-in-ef-4-1-code- first-part-4-table-splitting.aspx Mam jedną klasę, która zawiera obliczone pole i inną klasę, która zawiera pola, które muszę móc edytować. –

3

Mark obliczonego:

modelBuilder 
    .Entity<MyEntityType>() 
    .Property(_ => _.MyProperty) 
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 
+0

Dzięki, to wydaje się być odpowiedź. Ponieważ jednak używam mojej wyliczonej właściwości jako odwołania do klucza obcego do innej tabeli, otrzymuję teraz "Właściwość zależna w ReferentialConstraint jest odwzorowana na kolumnę generowaną przez sklep". Czy nie będzie można używać go jako odniesienia do klucza obcego? –

+0

@ EasyTimer: obliczona właściwość jako klucz obcy? O MÓJ BOŻE. Co byś zrobił, gdyby wynik obliczeń nie pasował do żadnej wartości klucza głównego w tabeli klucza podstawowego? – Dennis

+0

Zdaję sobie sprawę, że jest to niezwykły i nie idealny scenariusz. Tak się składa, że ​​podstawowa tabela kluczy jest sama w sobie widokiem, której klucz główny jest obliczany w taki sam sposób, jak tabela kluczy obcych i prawdopodobnie nie będzie żadnych rozbieżności. To wszystko jest częścią wprowadzenia nowego kodu do starego systemu, w którym moje ręce są lekko związane. –

Powiązane problemy