Простое удаление в Entity Framework с использованием WCF (отношения многие ко многим) - PullRequest
0 голосов
/ 20 мая 2011

У меня есть простая модель базы данных, содержащая 3 таблицы: Компании , Категории и CompanyCategories (которая представляет собой таблицу отношений только с 2 FK: CompanyID и CategoryID ).

Моя модель edmx показывает только таблицы «Компании» и «Категории» (CompanyCategories так или иначе скрыта, поскольку это простая таблица отношений «многие ко многим»).

В службе WCF у меня есть функция GetDatabase (), которая возвращает все объекты базы данных, обернутые в один большой пользовательский объект:

[OperationContract]
public FullDatabase GetDatabase()
{
   DBEntities context = new DBEntities ();

   FullDatabase mydb = new FullDatabase();
   mydb.Companies = context.Companies.ToList();
   mydb.Categories = context.Categories.ToList();

   return mydb;
}

[OperationContract]
public FullDatabase UpdateDatabase(FullDatabase db)
{
    // Here is my problem when removing a category from a company on 
    // the client its been brought back in my db object 
}

class FullDatabase()
{
   List<Company> Companies;
   List<Category> Categories;
}

Теперь на клиенте я использую GetDatabaseAsync () для получения базы данных в переменной _FullDB. Теперь, используя эту переменную, я попробовал следующее:

  // Adding a category like that Works well
  Company c = _FullDB.Companies.First();
  c.Categories.Add(_FullDB.Categories.First());
  wcfServiceClientObject.UpdateDatabaseASync(_FullDB);

  .....

  // Removing a category, doesn't work though :
  Company c = _FullDB.Companies.First();
  c.Categories.Remove(_FullDB.Categories.First());
  wcfServiceClientObject.UpdateDatabaseASync(_FullDB);

    // here my c.Categories.Count is updated correctly to delete the item
    // but when on the server after (in the UpdateDatabase function) the item 
    // I deleted is still there

Я действительно не понимаю, почему Add будет работать, а не Remove.

1 Ответ

0 голосов
/ 20 мая 2011

Наконец-то нашел проблему.Теперь это работает, но я не уверен, что это лучший способ сделать это.

При удалении категории из компании мне также пришлось удалить компанию из категории ...

Company comp = _FullDB.Companies.First();
Category cat = _FullDB.Categories.First();

comp.Categories.Remove(cat);
cat.Companies.Remove(comp);

wcfServiceClientObject.UpdateDatabaseASync(_FullDB);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...