1

我有一个DbContext类,它在OnModelCreating. 此上下文在针对 SQL Server 运行时效果很好,但针对 SQL CE 失败,因为某些实体包含TimeSpan属性。

当数据库是 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 CE 而不是 SQL Server Express 运行。理想情况下,我想用约定或显式覆盖来覆盖有问题的配置,如下所示:

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,已经对MaxLength属性进行了特定于 SQL CE 的处理,但它主要是使用内部类实现的。(嘘!)

4

1 回答 1

0

您可以通过 Fluent Interface 进行配置,调用DateTimePropertyConfiguration.HasColumnType 方法

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

或通过ColumnAttribute.DbType 属性

于 2012-05-30T11:06:25.257 回答