Как мы можем использовать EF Fluent API с отраженными типами - PullRequest
0 голосов
/ 08 февраля 2012

Как я могу использовать свободный API с несколькими отражениями для остановки повторения?

пример кода;

public abstract class Entity : IEntity
{
    public int Id { get; set; }
}

public class SemiStructuredEntity : Entity
{
    public virtual int DocumentId { get; set; }

    [ForeignKey("DocumentId")]
    public virtual Document Document { get; set; }
}

public class Payment : SemiStructuredEntity
{
    public string Code { get; set; }
}

public class Member : SemiStructuredEntity
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Document : Entity
{
    public string UniversalId { get; set; }
    public string Subject { get; set; }
}

и свободный;

    modelBuilder.Entity<Member>()
        .HasRequired(a => a.Document)
        .WithMany()
        .HasForeignKey(u => u.DocumentId);

    modelBuilder.Entity<Payment>()
            .HasRequired(a => a.Document)
            .WithMany()
            .HasForeignKey(u => u.DocumentId);

Когда нам нужен еще один класс, унаследованный базовым классом SemiStructuredEntity, мы должны определить для него другой свободный.

Моя мечта - это;(мой вопрос прокомментировал строки в блоке кода)

    List<Type> targetTypes = getSemiStructuredEntities();
    ///
    ///and now  How? How can i define fluent for all of targetTypes in second statements?
    ///

или

List<Type> targetTypes = getSemiStructuredEntities();
foreach (Type item in targetTypes)
{
           ///
           ///And now How? How can i define fluent for this type
           ///
}

Заранее спасибо.

1 Ответ

1 голос
/ 08 февраля 2012

Зачем использовать отражение? Вы можете определить свое отображение для повторного использования , используя типы, полученные из EntityTypeConfiguration<>, и регистрируя эти типы в modelBuilder.Configurations в своем методе OnModelCreation.

...