如何在EF核心中配置固定长度列



在上一个EF中,我可以做到这一点:

  entityTypeBuilder
    .Property(b => b.Foo)
    .IsRequired()
    .HasMaxLength(10)
    .IsFixedLength();

会产生

之类的迁移
Foo = c.String(nullable: false, maxLength: 10, fixedLength: true)

但是,在EF核心中没有IsFixedLength()

还有其他方法吗?

当前(EF Core 1.1.0)您只能直接指定列类型:.HasColumnType("char(123)")

请确保您的DB引擎理解此值!它通过"原样"。

另外,请注意,您应该在此处编写所有必需的维度/长度/精度值,因为.HasMaxLength()值将被忽略。

实际上,对于2.1版,这是:

entity.Property(e => e.Name).HasMaxLength(X).IsFixedLength();

对于任何进入此问题的人,就像我今天早些时候所做的那样,如果您正在寻找isfixedLength()函数,这是Microsoft.entityframeworkcore.realational package in Microsoft.entalitypropertybuilderextensions class上的扩展方法。/p>

对于那些寻找最新示例的人,在efcore版本6中,您可以实现IEntityTypeConfiguration,并在设置中包含注册;如下所示;

public class MyEntityConfiguration : IEntityTypeConfiguration<MyEntity>
{
    public void Configure(EntityTypeBuilder<MyEntity> builder)
    {
        builder.Property(o => o.MyProperty).HasMaxLength(2000);
    }
}

并在您的DbContext类中包括注册;

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());//Your assembly here
        base.OnModelCreating(builder);
    }

我个人更喜欢这种方法,因为您将关注点分为不同的文件,而不是具有单片dbcontext。这个答案并不排除其他答案,这只是一个附加的选择。

相关内容

  • 没有找到相关文章

最新更新