Entity framework 如何在EF中全局设置TimeSpan属性的存储类型?

Entity framework 如何在EF中全局设置TimeSpan属性的存储类型?,entity-framework,ef-code-first,sql-server-ce,entity-framework-4.3,Entity Framework,Ef Code First,Sql Server Ce,Entity Framework 4.3,我有一个DbContext类,它在OnModelCreating期间向模型生成器添加各种实体配置。在SQL Server上运行时,此上下文非常有效,但在SQL CE上失败,因为某些实体包含TimeSpan属性 当数据库为SQL CE时,是否可以修改配置,以便在OnModelCreating期间将存储类型设置为适当的类型,例如nvarchar30 在我的主应用程序中,我有一个DbContext,如下所示: 该DbContext针对完整的SQL Server运行。在我的测试中,我希望运行SQL CE

我有一个DbContext类,它在OnModelCreating期间向模型生成器添加各种实体配置。在SQL Server上运行时,此上下文非常有效,但在SQL CE上失败,因为某些实体包含TimeSpan属性

当数据库为SQL CE时,是否可以修改配置,以便在OnModelCreating期间将存储类型设置为适当的类型,例如nvarchar30

在我的主应用程序中,我有一个DbContext,如下所示:

该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的处理,但它主要是使用内部类实现的。嘘

您可以通过Fluent接口,调用


或者通过

SQL CE仅支持nvarchar,而不是varcharI,我正在做完全相同的事情,但目前我有属性可以在处理程序上应用类型。当我试图覆盖属性时,我收到一条消息:为表“MyTable”上的列“MyColumn”指定了冲突的配置设置,这很有意义,但能够覆盖该设置将非常有用。@glenatron我已决定使用SQL Server 2012的LocalDB而不是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");
    }
}
        modelBuilder.Entity<MyEntity>()
            .Property(x=> x.Duration)
            .HasColumnType("Varchar(30) NOT NULL");