什么是与模型构建器的HasDefaultValueSql等效的Entity Framework Core属性?

问题描述 投票:1回答:1

我想使用注释在Entity Framework Core中为我的属性设置默认值。问题是数据库没有设置默认值,因此值不会传递给数据库层。

我想做类似于modelBuilderHasDefaultValueSql

[DefaultValue("400")]
public int LengthInMeters {get; set;}

如何将以下代码转换为属性?

modelBuilder.Entity<Patient>().Property(c => c.LengthInMeters).HasDefaultValueSql("400");

单独使用默认值不起作用。我想单独使用属性而不必混淆迁移。

问题:我尝试过使用EF的其他方法,但实体框架核心没有一些项目。如modelBuilder.Conventions也不是AttributeToColumnAnnotationConvention也不是CSharpMigrationCodeGenerator也不是modelBuilder.Properties()

c# attributes entity-framework-core custom-data-attribute
1个回答
1
投票

This is what I ended up doing,如果某人有清洁工具而不是强化实施方式,请告诉我。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    foreach (var entityType in modelBuilder.Model.GetEntityTypes())
    {
        foreach (var property in entityType.GetProperties())
        {
            var memberInfo = property.PropertyInfo ?? (MemberInfo)property.FieldInfo;
            if (memberInfo == null) continue;
            var defaultValue = Attribute.GetCustomAttribute(memberInfo, typeof(DefaultValueAttribute)) as DefaultValueAttribute;
            if (defaultValue == null) continue;                   
            property.SqlServer().DefaultValue = defaultValue.Value;
        }
    }
}       

我可以使用默认值属性在数据库中设置默认值

[DefaultValue("400")]
public int LengthInMeters {get; set;}
© www.soinside.com 2019 - 2024. All rights reserved.