C# 更改最大长度,一次关闭需要多个实体

C# 更改最大长度,一次关闭需要多个实体,c#,entity-framework,asp.net-core,C#,Entity Framework,Asp.net Core,是c语言中的.NETCore2项目# 我使用Microsoft.EntityFrameworkCore.SqlServer(2.0.0)代码优先的方法。。。 我的DbCcontext中有20个实体,它们在相同的结构中有两个列。。。 我想让它是需要的,最大长度为40 我更喜欢用FluentApi 我想知道我是否可以避免重复同一个街区来做这件事 乙二醇 模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder) { modelBuilder.Entity() .Property

是c语言中的.NETCore2项目# 我使用Microsoft.EntityFrameworkCore.SqlServer(2.0.0)代码优先的方法。。。 我的DbCcontext中有20个实体,它们在相同的结构中有两个列。。。 我想让它是需要的,最大长度为40 我更喜欢用FluentApi

我想知道我是否可以避免重复同一个街区来做这件事

乙二醇

模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.Property(t=>t.Name)
.IsRequired()
.HasMaxLength(40);
modelBuilder.Entity()
.Property(t=>t.Name)
.IsRequired()
.HasMaxLength(40);
modelBuilder.Entity()
.Property(t=>t.Name)
.IsRequired()
.HasMaxLength(40);
modelBuilder.Entity()
.Property(t=>t.Name)
.IsRequired()
.HasMaxLength(40);
//它将继续像20,这是唯一一个领域,我有夫妇领域做修改。。。
}

提前感谢并对我的英语不好表示歉意

写一个扩展方法,一次调用就可以完成

class ExtensionMethods
{
    static public T SetupEntity<T>(this T input) where T : EntityTypeBuilder 
    {
        return input
            .Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(40);
    }
}
如果你真的想证明一个观点,你可以用一句话来证明

IEnumerable<Type> types = new Type[]
{
    typeof(LocationType),
    typeof(Location),
    typeof(Country),
    typeof(City)
}
.Select(t => modelBuilder
    .Entity(t)
    .SetupEntity()
)
.ToList();
IEnumerable类型=新类型[]
{
类型(位置类型),
类型(位置),
类型(国家),
类型(城市)
}
.选择(t=>modelBuilder
.实体(t)
.SetupEntity()
)
.ToList();

编写一个扩展方法,在一次调用中为您完成此操作

class ExtensionMethods
{
    static public T SetupEntity<T>(this T input) where T : EntityTypeBuilder 
    {
        return input
            .Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(40);
    }
}
如果你真的想证明一个观点,你可以用一句话来证明

IEnumerable<Type> types = new Type[]
{
    typeof(LocationType),
    typeof(Location),
    typeof(Country),
    typeof(City)
}
.Select(t => modelBuilder
    .Entity(t)
    .SetupEntity()
)
.ToList();
IEnumerable类型=新类型[]
{
类型(位置类型),
类型(位置),
类型(国家),
类型(城市)
}
.选择(t=>modelBuilder
.实体(t)
.SetupEntity()
)
.ToList();
但我会对添加常量值做一个小修改,这样您就不必通读代码行来确定默认值。这很小,但值得注意。(以及一些可读性/可维护性命名约定)

内部静态类EntityTypeBuilderExtensions
{
private const Default_Name_MaxLength=40;
静态公共T SetupPropertyName(此T输入),其中T:EntityTypeBuilder
{
返回输入
.Property(t=>t.Name)
.IsRequired()
.HasMaxLength(默认名称\u MaxLength);
}
}
。它允许您像这样链接:

modelBuilder.Entity<LocationType>().SetupEntity();
modelBuilder.Entity<Location>().SetupEntity();
modelBuilder.Entity<Country>().SetupEntity();
modelBuilder.Entity<City>().SetupEntity();
builder.Entity<MyEntity>()
  .ToTable("MyTable", "MySchema")
  .Property(e => e.Name, 
    n => n.IsRequired()
          .HaxMaxLength(10))
  .Property(e => e.City,
    c => c.HasxMaxLength(50));
builder.Entity()
.ToTable(“MyTable”、“MySchema”)
.Property(e=>e.Name,
n=>n.IsRequired()
.HaxMaxLength(10))
.地产(e=>e.城市,
c=>c.HasxMaxLength(50));
但我会对添加常量值做一个小修改,这样您就不必通读代码行来确定默认值。这很小,但值得注意。(以及一些可读性/可维护性命名约定)

内部静态类EntityTypeBuilderExtensions
{
private const Default_Name_MaxLength=40;
静态公共T SetupPropertyName(此T输入),其中T:EntityTypeBuilder
{
返回输入
.Property(t=>t.Name)
.IsRequired()
.HasMaxLength(默认名称\u MaxLength);
}
}
。它允许您像这样链接:

modelBuilder.Entity<LocationType>().SetupEntity();
modelBuilder.Entity<Location>().SetupEntity();
modelBuilder.Entity<Country>().SetupEntity();
modelBuilder.Entity<City>().SetupEntity();
builder.Entity<MyEntity>()
  .ToTable("MyTable", "MySchema")
  .Property(e => e.Name, 
    n => n.IsRequired()
          .HaxMaxLength(10))
  .Property(e => e.City,
    c => c.HasxMaxLength(50));
builder.Entity()
.ToTable(“MyTable”、“MySchema”)
.Property(e=>e.Name,
n=>n.IsRequired()
.HaxMaxLength(10))
.地产(e=>e.城市,
c=>c.HasxMaxLength(50));

在最后一部分(建议)中,您有一个输入错误,我认为这是一个Cast错误。前2个选项工作得很好。当我尝试构建时,我在扩展方法中遇到一个错误,即无法将lambda表达式转换为“string”类型,因为它不是最后一部分中的委托类型(建议)你有一个输入错误,我想这是一个Cast错误。前2个选项很好。当我尝试构建时,我在扩展方法中遇到了错误,说不能将lambda表达式转换为“string”类型,因为它不是委托类型。如果所有这些属性都是同一类型的,并且包含的对象实现了接口/基类,您可以使用modelbuilder.Types().Configure。否则,给出的答案可能是唯一(有点)简单的方法。如果所有这些属性都是相同类型的,并且包含的对象实现了接口/基类,则可以使用modelbuilder.Types().Configure。否则,给出的答案可能是唯一(有点)简单的方法