Умножение объектных отношений в коде сначала - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть следующие сущности:

  • Клиенты
  • Компания
  • Сотрудники
  • Заказы
  • Заказ-Elements

Тогда у меня есть другая сущность, которая называется Notes. У каждой сущности может быть много Заметок, как вы делаете это с помощью API, свободно бегущего в первую очередь? Цель состоит в том, чтобы иметь идентификатор объекта в таблицах Notes, и этот идентификатор объекта указывал бы на соответствующий объект.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вы можете расширить все сущности новым базовым классом, который сопоставляет свойство Notes (например, WithComment), и затем вы можете написать класс для сопоставления нового свойства:

public class WithComment
{
   public virtual IList<Note> Notes { get; set; }
}

public class Customer : WithComment
{
}

public class CustomerMapping : EntityTypeConfiguration<Customer>
{
      public CustomerMapping ()
      {
          ToTable( "Customers" );
          ..........................

          HasMany<Notes>( o => o.Notes); // relation to note class
      }
}

, а затем добавить конфигурацию

public class MyContext : DbContext
{
      public MyContext() { }

      protected override void OnModelCreating( DbModelBuilder modelBuilder )
      {
          modelBuilder.Configurations.Add( new CustomerMapping() );

          base.OnModelCreating( modelBuilder );
      }
 }
0 голосов
/ 04 апреля 2012

Entity Framework не поддерживает гетерогенные ассоциации "из коробки" (другие платформы, такие как NHibernate, делают)

Мой обходной путь - использовать NoteService, который хранит и извлекает заметки для постоянной сущности.

Вот упрощенная выдержка:

public ICollection<Note> GetNotes(IEntity entity)
{
    var entityType = ObjectContext.GetObjectType(entity.GetType()).Name;
    return context.Query<Note>()
                  .Where(x => x.EntityId == entity.Id &&
                              x.EntityType == entityType)
                  .ToList();
}

public void AddNote(IEntity entity, Note note)
{
    note.EntityType = ObjectContext.GetObjectType(entity.GetType()).Name;
    note.EntityId = entity.Id;
    context.Add(note);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...