1

DbContext実行中にさまざまなエンティティ構成をモデル ビルダーに追加するクラスがありますOnModelCreating。このコンテキストは、SQL Server に対して実行する場合はうまく機能しますが、一部のエンティティにTimeSpanプロパティが含まれているため、SQL CE に対しては失敗します。

データベースが SQL CE のときにストア タイプを適切なもの ( などnvarchar(30)) に設定するように構成を変更することはできますか?OnModelCreating

私の主なアプリケーションでは、次のDbContextようなものがあります。

public class MyDbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new Entity1Config());
        modelBuilder.Configurations.Add(new Entity2Config());
        modelBuilder.Configurations.Add(new Entity3Config());
        // Lots more entity and complex type configurations here.
    }
}

これDbContextは、完全な SQL Server に対して実行されます。私のテストでは、SQL Server Express ではなく SQL CE に対して実行したいと考えています。理想的には、次のように規則または明示的なオーバーライドで構成の問題をオーバーライドしたいと考えています。

public class MyTestingDbContext : MyDbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Entity1>()     
            .Property(x => x.Duration)     
            .HasColumnType("nvarchar(30) not null");
    }
}

DbContext明確にするために、元のクラスまたはそのエンティティを直接変更する必要のないソリューションにのみ関心があります。


注: にModelBuilderは、属性に対して SQL CE 固有の処理を既に行う規則があるように見えMaxLengthますが、主に内部クラスを使用して実装されています。(ブー!)

4

1 に答える 1

0

DateTimePropertyConfiguration.HasColumnType メソッドを呼び出して、Fluent Interface で両方を構成できます。

        modelBuilder.Entity<MyEntity>()
            .Property(x=> x.Duration)
            .HasColumnType("Varchar(30) NOT NULL");

またはColumnAttribute.DbType プロパティ経由

于 2012-05-30T11:06:25.257 に答える