Sto tentando di associare una proprietà TimeSpan Code First a server SQL. Code First sembra averlo creato come un Time (7) in SQL. Tuttavia, TimeSpan in .Net può gestire periodi più lunghi di 24 ore e ho bisogno di archiviare più di 24 ore per la durata dell'evento. Qual è il modo migliore per gestirlo con Code First.Come si esegue il mapping di TimeSpan con più di 24 ore al codice del server SQL in primo luogo?
risposta
Come per la mia previous question su come conservare TimeSpan in SQL mi hanno consigliato di conservarlo come secondi o biglietti ecc. Alla fine non ho mappato la colonna TimeSpan in quanto non esiste un equivalente nel server SQL. Ho semplicemente creato un secondo campo che ha convertito TimeSpan in tick e memorizzato nel DB. Ho poi impedito memorizzare il TimeSpan
public Int64 ValidityPeriodTicks { get; set; }
[NotMapped]
public TimeSpan ValidityPeriod
{
get { return TimeSpan.FromTicks(ValidityPeriodTicks); }
set { ValidityPeriodTicks = value.Ticks; }
}
Prima di tutto, MVC non ha nulla a che fare con questo problema. È interamente correlato a EF Code First e SQL Server, quindi è una questione DAL.
Una soluzione potrebbe essere quella di fornire un tipo di colonna personalizzata nella configurazione entità, in questo modo:
modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");
Ok. È il tipo di sql che vuoi usare a cui tengo. Qual è il modo standard per mappare. TimeSpan su un campo server SQL. – GraemeMiller
Ho pensato che fosse abbastanza chiaro. Il parametro stringa del metodo HasColumnType deve contenere il tipo SQL come lo dichiareresti in uno script sql o in un designer di tabelle, come nvarchar (50) o bit o qualsiasi cosa di cui hai bisogno ed è compatibile con il tipo di dati .Net che stai utilizzando . Per qual è il tipo esatto da utilizzare nel tuo caso specifico, basta sperimentare. –
Sapevo come cambiare il tipo di colonna, non è questo il problema. Sembra una mappatura dei problemi abbastanza comune. Net TimeSpan a SQL. Volevo sapere in particolare su quale sia il modo migliore per gestire la memorizzazione di. TimeSpan su server SQL. – GraemeMiller
Per quanto ne so non v'è alcun tipo di dati equivalente in SQL Server Per il periodo di NET. La corrispondenza più vicina è Tempo, ma, come hai sottolineato, supporta solo valori fino a 24 ore? http://msdn.microsoft.com/en-us/library/ms186724.aspx#DateandTimeDataTypes.
Il seguente documento MSDN descrive questo http://msdn.microsoft.com/en-us/library/bb386909.aspx. Presumo che dal momento che non ci sia una soluzione elencata lì, non è attualmente possibile.
Sì, non l'ho mai trovato lontano dalla mia risposta. EF sembra solo prendere la strana decisione di mapparlo al tipo di dati Time di SQL Server che ovviamente è una mancata corrispondenza – GraemeMiller
- 1. come convertire il formato di 24 ore TimeSpan in formato 12 ore TimeSpan?
- 2. Come convertire TimeSpan in 24 ore e in minuti String?
- 3. TimeSpan FormatString con ore opzionali
- 4. Che cosa fa in primo luogo il codice EntityFramework con getter/setter di proprietà?
- 5. input type = "tempo" più di 24 ore
- 6. Come si esegue il mapping del volume all'esterno di C: \ Users al contenitore su Windows?
- 7. Come mantenere un'app in primo piano in esecuzione 24 ore su 24, 7 giorni su 7?
- 8. Oggetti temporali Python con più di 24 ore
- 9. Conservare più di 24 ore in un DateTime
- 10. Cosa determina in primo luogo l'edizione e la dimensione del database SQL di Azure con il codice EF?
- 11. Tempo di 24 ore rigoroso in JFormattedTextField
- 12. Converti 12 ore in 24 ore
- 13. Come analizzare la stringa con ore superiori a 24 su TimeSpan?
- 14. Utilizzare l'analizzatore TimeSpan 24:00
- 15. Come: eseguire un blocco di codice ogni 24 ore in un server?
- 16. Il commit viene aggiunto al master nelle ultime 24 ore
- 17. SimpleDateFormat.getTimeInstance ignora il formato 24 ore
- 18. Convert 24 tempo ore a 12 ore più AM indicazione/PM Oracle SQL
- 19. SQL Server 2008 Il mapping dell'utente di accesso non persiste
- 20. Come si esegue il mapping dei valori di Zip2?
- 21. Perl: mapping al primo elemento degli elenchi
- 22. Come si esegue il controllo del certificato SSL più difficile possibile con il codice .NET?
- 23. Somma SQL di stato diverso entro 24 ore di gruppo entro le ore
- 24. Come si esegue il mapping di una chiave primaria composita nel codice Entity Framework 4 prima?
- 25. Dove si trova il PYTHONPATH in primo luogo?
- 26. Formato di convalida del formato di php 24 ore
- 27. Come selezionare i record delle ultime 24 ore utilizzando SQL?
- 28. Come impostare TimePickerDialog su 24 ore?
- 29. Regex per 12 ore e il tempo 24 ore formato
- 30. Come si esegue una query di SQL Server da PowerShell?
Questo approccio potrebbe portare a query non ottimali quando qualcuno non sa o dimentica che ValidityPeriod è proprietà NotMapped. Se è utilizzato in un LINQ in cui la query EF non si lamenterà, verrà semplicemente trascinata la raccolta e l'iterazione. Per questo motivo è possibile utilizzare i metodi di accesso Get/Set obsoleti per chiarire che non devono essere utilizzati nelle query. – StanislawSwierc
D'accordo, ho modificato il mio codice nella mia soluzione in modo che l'implementazione sia più chiara. – GraemeMiller
Utilizzare i metodi di estensione per ottenere o impostare il valore e ci dovrebbero essere meno equivoci. – deerchao