2016-09-01 4 views
0

Я хотел бы перейти от общего шаблона во многих отношениях, чтобы иметь отношение, используя неявный совместный стол, и вместо этого я хочу использовать совместную таблицу в явном виде и реализовать своего рода ленивую нагрузку зависимого объекта «многие-ко-многим».От многих до многих отношений в EF, сделанных без ссылок на объект

Это обрамление дизайна несвязанных множеств, где граф объектов передается через http на сервер приложений. На сервере я обновляю только ключи, а не сущности. Причина этого: если я попытаюсь сохранить тот же объект, определенный в разных экземплярах модели сущности, я получаю ошибку параллельного сценария. Вместо этого я не хочу передавать объект, а просто хочу передать совместный стол с идентификаторами.

Class 
------- 
int ID 
List ClassStudent 

Student 
------- 
int ID 
List ClassStudent 


ClassStudent // this type must be explicitely defined in the model 
-------------- 
StudentID 
ClassID 

Можно ли определить такую ​​конфигурацию с FluentApi?

Распространенное scenarion использует типы:

Student 
--------------- 
int ID 
List Classes 

Class 
---------- 
int ID 
List Students 

мне не нужно это одновременно: Из-изменений. Нужна помощь с использованием свободного API. Я пробовал много случаев.

ответ

2

Да, это возможно. Все, что вам нужно, - это сконфигурировать составной ПК для ClassStudent и двух однонаправленных отношений one-to-many (Student -> ClassStudent и Class -> ClassStudent).

Что-то вроде этого:

modelBuilder.Entity<ClassStudent>() 
    .HasKey(e => new { e.StudentID, e.ClassID }); 

modelBuilder.Entity<Student>() 
    .HasMany(e => e.ClassStudent) 
    .WithRequired() 
    .HasForeignKey(e => e.StudentID); 

modelBuilder.Entity<Class>() 
    .HasMany(e => e.ClassStudent) 
    .WithRequired() 
    .HasForeignKey(e => e.ClassID); 
+0

Спасибо! Это спасло меня. Я получаю ClassStudent с внешними ключами. Теперь, когда я получаю IQueryable . Включение , свойство пуст. Следует ли загружать таблицу ClassStudent отдельно? Или есть другой способ заполнить свойство, используя свободную конфигурацию api? – Dmitry

+0

Добро пожаловать. Однако я не совсем понимаю последний комментарий/вопрос. Нет ничего особенного. Выполнение чего-то типа 'var classes = db.Class.Include (e => e.ClassStudent) .ToList();' загружает свойство ClassStudent'. Похоже для 'Студента'. –

+0

Да, просто забыл засеять данные. Все в порядке. – Dmitry

 Смежные вопросы

  • Нет связанных вопросов^_^