在上一个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。这个答案并不排除其他答案,这只是一个附加的选择。