Domanda

Come faccio a dire a un contesto dati LINQ di ignorare sia le proprietà specifiche, o tutte le proprietà di sola lettura, quando si associa un set di risultati ad un oggetto?

Sto lavorando con alcune istruzioni T-SQL che sono difficili da esprimere con LINQ, quindi sto utilizzando il metodo ExecuteQuery del contesto dati per passare il T-SQL direttamente al database.

Se la mia classe T ha tutte le proprietà di sola lettura, ottengo eccezioni a runtime quando il contesto dati tenta di impostare tali proprietà e non riesce perché non c'è alcuna proprietà setter. Come faccio a dire il contesto di ignorare quelle proprietà?

Questo è quello che sto facendo ora. Funziona, ma fa schifo:

public bool IsPaidInFull {
    get { return NetTotal <= 0m; }
    set { /* needed so linq doesn't choke. Should never be set by hand */ }
}
È stato utile?

Soluzione

Avete considerato LINQ to Entities? Esso non può essere vale la pena di convertire il vostro progetto, a seconda di quanto lungo sei, o quanto ORM in testa che hai dimestichezza con. Tuttavia, questo scenario esatto non sarebbe un problema in LINQ to Entities. Esso non tenta di aggiornare lettura solo le proprietà nell'oggetto quando viene caricato, perché non sono esplicitamente mappati, sono semplicemente proprietà di estensione.

Inoltre, si potrebbe andare l'itinerario / java vecchia scuola utilizzando le funzioni getter invece di proprietà. bool getIsPaidInFull pubblico () {return NetTotal <= 0m;}.

Oppure si potrebbe giocare con l'attuazione delle proprietà di sola lettura in una classe figlia ereditata, ma che può presentare ogni tipo di problema di tipo.

Altri suggerimenti

public bool IsPaidInFull
{
    get { return NetTotal <= 0m; }
    private set { ;}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top