2012-04-01 3 views
0

У меня есть следующие субъекты:Множественные Объект Отношения в Code First

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

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

ответ

0

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

Мой приста karound должен использовать 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); 
} 
1

Вы можете расширить каждые объекты с новым базовым классом, отображающие Notes свойств (ES 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); 
     } 
} 
Смежные вопросы