Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 EF как отключить проверку ?  [new]
S_A_V_e
Member

Откуда:
Сообщений: 187
Здравствуйте.
Есть в БД 2 таблицы: DataSource и DataSetAttributes. Они включены в модель MetadataEntities. Есть такой код:

class Class3
{
// Здесь начинается выполнение
public void Run()
{
Class1 c1 = new Class1();
c1.Run();

Class2 c2 = new Class2();

c2.FuncDS();
}
}

class Class1{

List<DataSetAttribute> list;

public Class1()
{
list = new  List<DataSetAttribute>();
}

public void Run()
{
for(int i = 0; i < 5; i++)
{
FuncA();
}
}
void void FuncA()
{
// Просто создаётся новый аттрибут и инициализируется какими то значениями
// Далее он просто добавлиется в список. Свойство EditorType не заполняется т.к. атрибут не
// предполагается сохранять в БД.
DataSetAttribute attribute = new DataSetAttribute()
attribute.Id = ....;
attribute.DataType = ...;
......

list.Add(attribute);
}
....
}

class Class2
{
MetadataEntities me;

public Class2()
{
me = new MetadataEntities();
}

public void FuncDS()
{
// Создаю новый DataSource, инициализирую и пытаеюсь сохранить в БД
DataSource ds = new DataSource();
ds.Name = .....;
......
// При выполнении этой строки Exception
me.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
}
}


При выполнении реального кода получаю exception :

System.Data.UpdateException occurred
Message=Entities in 'MetadataEntities.DataSetAttributes' participate in the 'FK_DataSetAttributes_EditorTypes' relationship. 0 related 'EditorTypes' were found. 1 'EditorTypes' is expected.
Source=System.Data.Entity
StackTrace:
.....


Как следует из кода созанный DataSetAttribute никуда кроме листа не добавляется. Он нужен просто как объект по которому будет создан другой объект. Т.е. созданный объект типа DataSource никак не связан с созданными объектами типа DataSetAttribute. Но при попытке сохранить ds почему то проверяются и объекты типа DataSetAttribute созданные оператором new. Кроме того если задать EditorType , то EF ещё и пытается их писать в БД (вылетает с другим ексепшеном).
Вопрос:
В чём причина и как от этого избавиться. Как заставить EF проверять и писать в БД только объекты добавленные мтодами типа me.DataSetAttributes.AddObject(dsAttribute);

Заранее спасибо за ответы.
13 окт 10, 13:55    [9600028]     Ответить | Цитировать Сообщить модератору
 Re: EF как отключить проверку ?  [new]
S_A_V_e
Member

Откуда:
Сообщений: 187
Разобрался.
Была такая строчка:
attribute.DataSource = ds;

При этом не только в новом объекте типа DataSetAttribute запоминается ссылка на DataSource , но и в коллекцию ds.DataSetAttributes добавляется attribute. Т.е. объекты связываются.Не очевидно , но факт...
Тема закрыта.
20 окт 10, 20:18    [9644339]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить