4

モデル駆動型の設計アプローチで、Visual Studio 2010 RTM と .NET/Entity Framework 4 RTM を使用しています。DateTimeOffset フィールドを持つエンティティを作成すると、EF モデラーは DateTimeOffset を SQL datetimeoffset ではなく SQL datetime にマップしようとします。SQL Server 2008 Express を使用しているため、データベースで datetimeoffset がサポートされています。

Visual Studio で次のエラーが発生します。

エラー 2019: 指定されたメンバー マッピングが無効です。タイプ 'Data.SqlStorage.MyType' のメンバー 'Created' のタイプ 'Edm.DateTimeOffset[Nullable=False,DefaultValue=,Precision=]' は 'SqlServer.datetime[Nullable=False,DefaultValue=,Precision=] と互換性がありませんタイプ 'Data.SqlStorage.Store.MyTypes' のメンバー 'Created' の 3]'

EDMX StorageModels xml セクションでタイプを直接編集すると、次のエラーが発生します。

エラー 40: タイプ datetimeoffset がネームスペースまたはエイリアスで修飾されていません。修飾なしで使用できるのは PrimitiveTypes のみです。

モデラーがこれを SQL の datetimeoffset 型に正しくマップしないのはなぜですか? この問題は、Visual Studio 2010 および .NET Framework 4 のベータ版をまだ使用していたときにも発生しました。

4

3 に答える 3

5

RTM リリースでは、DbContext で次のようなことができます。

 protected override void OnModelCreating(DbModelBuilder modelBuilder) {
     modelBuilder.Entity<EntityName>().Property(p => p.PropertyName).HasColumnType("datetimeoffset");
 }

これは、データベースを生成するときに、datetime の代わりに datetime2 を使用するように Entity Framework Code First に指示する場合にも役立ちます。

于 2011-04-24T06:54:27.183 に答える
1

逆に行ってみてください(DB->モデル)。それはジュリーラーマンのために働いた。名前空間で修飾する場合は、手動で編集したEDMXも機能するはずですDateTimeOffset

于 2010-04-15T12:55:20.793 に答える
1

解決策は、スクリプトsqlを手動で変更してデータベースを生成した後、DBから一度更新することでした。私はそれを行い、テーブルマッピングを確認した後、データ型がDATETIMEではなくDATEに変更されました。DATETIME2に変更したい場合も同様だと思います。

于 2011-01-16T20:19:41.447 に答える