Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF, WInForms, привязка данных - не работает удаление / 1 сообщений из 1, страница 1 из 1
05.03.2010, 15:36
    #36505224
vinvin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF, WInForms, привязка данных - не работает удаление
При работе с EF я столкнулся с проблемой при привязке данных. Точнее дело не только в привязке, но и в функциональности.

В EF у меня было представлены две сущности - одна была родительским абстрактным классом firm, вторая - была классом, порожденная от первой - firm_local.

Вначале я при создании формы пытался просто привязать данные сущностей к DataSource:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public partial class Form1 : Form
    {
        skladEntities se = new skladEntities();
……
 public Form1()
        {
            InitializeComponent();
            firm_localBindingSource.DataSource = 
                                from ff in se.firm
                                           where ff is firm_local
                                                 select ff;
…...
 private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
        {
            firm_local fl = firm_local.Createfirm_local(0, "1111", "2222");
            firm_localBindingSource.Add(fl);
……
 private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
        {            
            firm_localBindingSource.RemoveCurrent();
….
 private void button1_Click(object sender, EventArgs e)
        {
            se.SaveChanges();
 

При этом добавление и сохранение работало, а вот удаление - не работало. Причем удаление не влияло не только на пользовательский интерфейс, но и на состав списка. До и после удаление Count оставался тем же.
Я попробывал упростить класс - сделать для экперемента работу с одним простым классом.
Для этого я сделал класс firm не абстрактным, убрал родительскую связь межу firm и firm_local.
Тот же самый код работал (ну, естественно изменил только запрос)

Код: plaintext
1.
2.
3.
            firm_localBindingSource.DataSource = 
                                from ff in se.firm
                                                 select ff;

После этого я обнаружил в Интернете, что у других людей так же возникали проблемы при удалении, когда использовались сложные объекты.

тыц

После этого я пытался использовать приведение к интерфейсу IBindingSource (как рекомендовали сотрудники Microsoft тыц )

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public partial class Form1 : Form
    {
        skladEntities se = new skladEntities();
        IBindingList bl;
…
...
bl= 
((from ff in se.firm
                   where ff is firm_local
                   select ff) as IListSource).GetList() as IBindingList;
firm_localBindingSource.DataSource =  bl;
…..
bl.Remove(firm_localBindingSource.Current as firm_local);

Удаление по прежнему не работало!
Когда я сделал класс BindingList:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 public class Firm_LocalObservableCollection : BindingList<firm_local>
    {
        skladEntities se = new skladEntities();
        public Firm_LocalObservableCollection()
        {
            foreach (firm em in (from e1 in se.firm
                                 where e1 is firm_local                                             
                                               select e1))
                base.Add(em as firm_local);            
        }
         public virtual void Add(firm_local item)
        {
            base.Add(item);
            se.AddTofirm(item);
        }
 
        public virtual void Remove(firm_local item)
        {
            base.Remove(item);
            se.DeleteObject(item);
        }
.....

После этого удаление заработало!
В чем дело не знаю. Скорее всего это ошибка Microsoft. Отношусь к этому как к магическомй коду, который пока буду использовать. :)
Если кто-то уже решал подобную проблему - поделитесь опытом. буду очень признателен.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF, WInForms, привязка данных - не работает удаление / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]