Что такое атрибут Entity Framework Core, эквивалентный HasDefaultValueSql для modelBuilder? - PullRequest
1 голос
/ 07 марта 2019

Я хочу использовать аннотации для установки значения по умолчанию для моих свойств в Entity Framework Core. Проблема заключается в том, что база данных не устанавливает значения по умолчанию, поэтому значение не передается на уровень базы данных.

Я хочу сделать что-то похожее на modelBuilder HasDefaultValueSql:

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

Как преобразовать приведенный ниже код в атрибуты?

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

Использование значений по умолчанию само по себе не работает. Я хочу использовать атрибуты в одиночку, не связываясь с миграциями.

Проблемы: я пробовал другие методы с EF, но в Entity Framework Core нет некоторых элементов. Такие как modelBuilder.Conventions, ни AttributeToColumnAnnotationConvention, ни CSharpMigrationCodeGenerator, ни modelBuilder.Properties()

1 Ответ

0 голосов
/ 08 марта 2019

Это то, чем я в конечном итоге занимался , если у кого-то есть более чистый способ реализации, дайте мне знать.

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;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...