2014-11-05 16 views
10

Sono appena agli inizi con Entity Framework e sono preoccupato per la facilità con cui una chiave primaria può essere ignorata. So che posso proteggere questo modello nel mio controller (sto usando WebAPI con ASP.NET MVC 5), ma mi chiedo se sia possibile impedire a chiunque di impostare l'ID del mio modello dal modello stesso tramite annotazioni o qualcosa del genere?I setter privati ​​possono essere utilizzati in un modello di entità?

Fondamentalmente posso fare questo:

public int ID { get; private set; } 

o qualcosa di simile, in un modello EF6?

Se questo è facilmente reperibile tramite Google, non conosco i termini da cercare. Non sono stato in grado di trovare nulla che risponda davvero a questo.

+1

Sembra possibile. L'ho appena provato con la mia applicazione di tutorial Mvc Movie dal sito di asp.net. Se non sei sicuro che funzionerà e la ricerca di Google non funziona, provalo! Ma fare domande non fa male a nessuno: P. –

+0

Ya, dovrei avere. Voglio solo vedere qualche documentazione là fuori e spero che la domanda possa fare un buon posto per vivere la prossima volta che qualcuno guarda. Per favore aggiungi una risposta se puoi. Grazie! – OneHoopyFrood

risposta

12

Sì, è possibile, e dovrebbe funzionare bene. Per this blog post da Julie Lerman (che è Entity Framework MVP di Microsoft, quindi mi raccomando di leggere il suo blog sul vostro viaggio attraverso EF!):

Entity Framework richiede un costruttore senza parametri al fine di materializzare oggetti restituiti dalle query (o caricamento). Ho effettuato la concessione nella mia classe ma noto che si tratta di un costruttore privato . Quindi sto ancora proteggendo la mia classe. Nessuno può accedervi. Ma EF è ancora in grado di popolare questa classe quando eseguo query. E no, non sto facendo un po 'di magia per dire a EF di usare il mio costruttore pubblico . Usa davvero il costruttore privato.

+3

Julie Lerman è il mio agente automatico su cose come questa. Ho letteralmente cercato "set privato di Julie Lerman" senza nemmeno sapere se ne avesse già parlato. – IronMan84

Problemi correlati