我有一个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特定处理,但它主要使用内部类实现。 (Boooo!)
答案 0 :(得分:0)
您可以通过Fluent Interface配置,同时调用DateTimePropertyConfiguration.HasColumnType Method
modelBuilder.Entity<MyEntity>()
.Property(x=> x.Duration)
.HasColumnType("Varchar(30) NOT NULL");