У меня есть простая модель базы данных, содержащая 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.