我有一个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 的处理,但它主要是使用内部类实现的。(嘘!)