Где находится пространство метаданных в ядре Entity Framework? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь прочитать пользовательские атрибуты, используя отражение, установленное Fluent API в EntityFramework Core. Я провел небольшое исследование и обнаружил, что MetadataWorkspace может быть полезным, как показано в следующих ссылках: Ссылка 1 , Ссылка 2 . Все эти решения находятся на EntityFramework.

Как использовать пространство метаданных с EntityFramework Core?

Или, есть ли какое-либо решение в Asp.Net Core 2.1 и EntityFramework Core для чтения свойств конфигурации во время выполнения, установленных Fluent API?

1 Ответ

0 голосов
/ 08 августа 2019

EF ядро ​​не имеет MetadataWorkspace
Чтобы получить аннотации, установленные EF Core Fluent API, используйте это в качестве примера:

    public class Basic {
        public int Id {get; set;}
        public string Value {get; set;}
    }

    public class BasicConfig {
        public void Configure(EntityTypeBuilder<Basic> builder)
        {
            builder.ToTable("Basic");

            builder.HasKey(e => e.Id)
                .HasName("PK_Basic");


            builder.Property(e => e.Value)
                .IsRequired()
                .HasMaxLength(500)
                .IsUnicode(false)
                .HasColumnName("Value");
        }
    }


    /// <summary>
    /// Returns the MaxLength of a PropertyInfo (field) off of a Custom EF modal Type
    /// </summary>

    public int DetermineSize(Type basicModelType) {
        IEntityType fake = _context.Model.FindEntityType(basicModelType);
        IProperty prop = fake.GetProperty("Value");
        IEnumerable<IAnnotation> ann = prop.GetAnnotations();

        int maxSize = (int)ann.SingleOrDefault(item => item.Name.Equals("MaxLength"))?.Value;

        return maxSize;
    }
...