2

私はSQLServer2008を使用してEntityFrameworkプロジェクトに取り組んでいます。最近datetime2、精度が必要なため、多くの日付にフィールドタイプを使用するように変更しました。

これは、ライブデータベースと開発データベースに対しては正常に機能しますが、エンドツーエンドのテストの一環として、このタイプをサポートしていないSQL ServerCE4.0を使用していますdatetime2。Entity Frameworkがデータベースを構築しようとすると、次のような一連の例外が返されます。

error 0040: The Type datetime2 is not qualified with a namespace or alias. Only primitive types can be used without qualification.

明らかに、テスト目的で本番コードを変更することに価値はありません。したがって、datetime2値を通常datetimeに変換するか、?に変換するように指示する方法はありvarcharますか?

テストの目的は、データレイヤーからインターフェイスまですべてが期待どおりに機能していることを確認することです。したがって、この種のテストを実装するためのより良い方法があれば、有用な代替手段が提供される可能性があります。

4

2 に答える 2

3

CEよりもSQLServer2012LocalDBを使用する方がよい場合があります。SQL Server 2012を使用すると、潜在的な互換性の問題が発生する可能性があることを認識しています(実際には発生しないはずですが)が、LocalDBは完全なSQL-Server機能のファイルベースのデータベースです。datetime2をサポートします

于 2012-10-04T15:51:51.007 に答える
1

結局、私が使用しているエンドツーエンドのテスト構成で十分に機能するこの問題の解決策を見つけました。私が行った解決策は、特別なDataContextを使用してSQLServerCE要求を処理することでした。

public class TestDataContext : DataContext 
{

    protected override void  OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        // list of available Conventions: http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions(v=vs.103).aspx 

        // Remove the column attributes that cause the datetime2 errors, so that 
        // for SQL Server CE we just have regular DateTime objects rather than using
        // the attribute value from the entity.
        modelBuilder.Conventions.Remove<ColumnAttributeConvention>();

        // Attempt to add back the String Length restrictions on the entities. I havent 
        // tested that this works.
        modelBuilder.Configurations.Add( new ComplexTypeConfiguration<StringLengthAttributeConvention>());

        // SQL Server CE is very sensitive to potential circular cascade deletion problems
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

    }

}

テストクラスで通常のDataContextをTestDataContextに置き換えることで、SQLServerCEがクラッシュすることなく同じ動作をすることができます。

于 2012-10-10T12:15:03.580 に答える