SQL ServerにTimeSpan Code Firstプロパティをマップしようとしています。コードファーストは、それをSQLでTime(7)として作成しているようです。しかし、.NetのTimeSpanは24時間より長い時間を処理することができ、イベントの長さは24時間より長く保存する必要があります。コードファーストでこれを処理する最善の方法は何ですか?24時間以上のTimeSpanをSQL Serverのコードファーストにマップするにはどうすればよいですか?
答えて
SQLでのTimeSpanを保存する方法についての私のprevious questionを1として最終的には、SQL Serverに相当するものが存在しないため、TimeSpan列をマップしませんでした。私は単にタイムスパンをダニに変換し、それをDBに格納した第2フィールドを作成しました。私はその後、TimeSpanの格納を防ぎました
public Int64 ValidityPeriodTicks { get; set; }
[NotMapped]
public TimeSpan ValidityPeriod
{
get { return TimeSpan.FromTicks(ValidityPeriodTicks); }
set { ValidityPeriodTicks = value.Ticks; }
}
まず、MVCはこの問題とは関係ありません。これはEF Code FirstとSQL Serverに完全に関連しているため、DALの問題です。
一つの解決策は、このように、あなたのエンティティの設定でカスタムの列の型を提供することができます:私は秒またはチケットとしてそれを保存するために助言された
modelBuilder
.Entity<MyClass>()
.Property(c => c.MyTimeSpan)
.HasColumnType("whatever sql type you want to use");
それは、私が気にしているものであればどんなSQLタイプでもあります。 .Net TimeSpanをSQLサーバーフィールドにマップする標準的な方法は何ですか。 – GraemeMiller
私は十分にはっきりしていると思った。 HasColumnTypeメソッドの文字列パラメータには、nvarchar(50)などのsqlスクリプトまたはテーブルデザイナで宣言するSQL型と、使用する.Netデータ型に互換性のある必要なものなどが含まれている必要があります。あなたの特定のケースで使用する正確なタイプは何ですか、単に実験してください。 –
私は列の種類を変更する方法を知っていましたが、それは問題ではありません。それは合理的によくある問題マッピングのようです.Net TimeSpan to SQL。私はSQL Serverへの.Net TimeSpanの格納を処理する最良の方法について具体的に知りたいと思っていました。 – GraemeMiller
私の知る限り、同等のデータ型はSQL Server for .NETのTimeSpanにありません。最も近いものはTimeですが、あなたが指摘したように、それは最大24時間の値しかサポートしていませんか? http://msdn.microsoft.com/en-us/library/ms186724.aspx#DateandTimeDataTypes。
次のMSDNドキュメントには、http://msdn.microsoft.com/en-us/library/bb386909.aspxが記載されています。私はそこにリストされた解決策がないので、現在可能ではないと仮定しています。
ええ、私は決して私の答えから離れて見つけたことはありません。 EFは、明らかにそれが不一致であるSQL Server Timeデータ型にマップする奇妙な決定をするようです – GraemeMiller
- 1. Pythonで24時間以上の時間値を扱うにはどうすればいいですか?
- 2. SQL Server 2005で24時間以上の計算
- 3. SQL Serverで2時間の時間を生成するにはどうすればよいですか?
- 4. 24時間以上の時間表現
- 5. 24時間から12時間に変換するにはどうすればよいですか?
- 6. email_token_expiry時間を24時間に設定するにはどうすればよいですか?
- 7. SQL Serverの時刻を24時間に変換する
- 8. 24時間以上の時間フォーマットを使用するColdfusion DateDiff
- 9. 12時間文字列をC#TimeSpanに変換するにはどうすればよいですか?
- 10. CURRENT_TIMESTAMP MySQLで24時間を追加するにはどうすればよいですか?
- 11. Facebookで24時間以上認証できますか?
- 12. 24時間以内に異なるステータスのSQLの合計
- 13. 既存のSQL Server ExpressにSQL Server Reporting Services(SSRS)をインストールするにはどうすればよいですか?
- 14. 過去24時間以内にデータベーステーブルに追加されたレコードを検索するにはどうすればよいですか?
- 15. 2時間の間に数時間を取得するにはどうすればよいですか?
- 16. SQL Serverに費やす時間はどのように監視しますか?
- 17. asp.netでSQL Serverテーブルの上位n行を削除するにはどうすればよいですか?
- 18. SQL Server 2008のMERGEステートメントで一時変数を宣言するにはどうすればよいですか?
- 19. Sql Server CE 3.5 sdfデータベースをSql Server CE 4.0にアップグレードするにはどうすればよいですか?
- 20. SQL Serverを選択するにはどうすればよいですか?
- 21. PHPで12時間から24時間の間にどのように変換しますか?
- 22. Androidで24時間形式で現在の時間を取得するにはどうすればよいですか?
- 23. 2つ以上のaspxページ間でセッション変数を渡すにはどうすればよいですか?
- 24. SQL Statementで現在の日付+4時間を取得するにはどうすればよいですか?
- 25. SQL Serverデータベース間で図を移動するにはどうすればよいですか?
- 26. SQL Serverで時刻を比較するにはどうすればよいですか?
- 27. パンニング時にGoogleマップが移動しないようにするにはどうすればよいですか?
- 28. 日時フィールド間の経過時間を比較するにはどうすればよいですか?
- 29. Entity Frameworkコードファースト:SQL Serverの計算列をCFモデルにマップする方法は?
- 30. 特定の時間にオブジェクトが消えるようにするにはどうすればよいですか?
このアプローチは、誰かがValidityPeriodがNotMappedプロパティであることを知らない、または忘れた場合に、最適でないクエリにつながる可能性があります。クエリEFが不平を言っていないLINQで使用されている場合は、コレクションをプルしてそれを反復処理します。このため、古いファッションのGet/Setアクセサを使用して、クエリで使用しないことを明確にすることができます。 – StanislawSwierc
合意しました。私のソリューションでコードを調整して、実装がより明確になるようにしました。 – GraemeMiller
拡張メソッドを使用して値を取得または設定し、誤解が少なくなるようにします。 – deerchao