Используя Entity Framework, как добавить запись в таблицу сопоставления в отношении «многие ко многим»

У меня есть следующие таблицы (сжатые для удобства чтения):

Вызов

ID CallerName CallerTime

Категории

ID КатегорияНазвание

CallCategories

CallID ID категории

Когда я смоделировал их в Entity Framework, таблица сопоставления «CallCategories» была исключена. Я не понимаю, как добавить запись в эту таблицу через EF.

Я зашел так далеко:

public void AddCategory(int callID, int categoryID)
{
    using (var context = new CSMSEntities())
    {
        try
        {
            //Get the Call
            var call = context.Calls.FirstOrDefault(x => x.callID == callID);

            //Create a new Category
            Category category = new Category();
            category.categoryID = categoryID;

            //Add the Category to the Call
            call.Categories.Add(category);

            context.SaveChanges();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

Я использую «Добавить» или «Прикрепить». Кроме того, кажется, что я могу подходить к этому неправильно. Должен ли я на самом деле создавать новую категорию? Похоже, что это создаст фактическую запись в таблице категорий, когда я действительно хочу просто добавить запись в таблицу сопоставления «многие ко многим».

Я просто не могу уложить в голове некоторые вещи из EF. :-/

Любая помощь высоко ценится!

В ответ гном....

Я думаю, что вы на что-то здесь. Хотя, разве я не назвал бы "Добавить" (или это Прикрепить)? Нравиться:

//Get the Call
var call = context.Calls.FirstOrDefault(x => x.callID == callID);

//Find the Category and Add to the Call 
Category category = context.Categories.FirstOrDefault(c => c.categoryID == categoryID);
call.Categories.Add(category);

context.SaveChanges(); 

person Shayne    schedule 09.08.2010    source источник
comment
Что вы придумали в итоге? Или вы что-то решили?   -  person asfsadf    schedule 12.08.2010


Ответы (1)


Я считаю, что нужно добавить модель категории, а не просто добавить идентификатор. пытаться,

//Add the Category to the Call
call.Categories = context.Categories.FirstOrDefault(c => c.categoryId == categoryId);
context.SaveChanges();
person gnome    schedule 09.08.2010
comment
Смотрите мой ответ в исходном вопросе. Я не могу заставить код работать в этом комментарии, и он плохо форматирует мой комментарий. - person Shayne; 10.08.2010