Я новичок в EF 4, и это то, что я сделал до сих пор:Вставить новый объект с существующим объектом
- Создайте файл EDMX на основе моей базе данных
- Создать генерацию кода для моих объектов (ПОКО). Теперь у меня есть model1.tt, когда расширен я вижу аль мои классы
- Создать хранилище для каждого класса, на основе IRepository
Сейчас я работаю с двумя объектами, А и В. Объект А имеет свойство типа B. В моей winform у меня есть комбо, заполненное объектами типа B. Когда кнопка сохранения нажата, создается новый экземпляр класса A и задаются все свойства. Свойство объекта B устанавливается следующим образом:
objectA.myObjectB = (objectB)cmbBObjects.selectedItem;
Затем я создаю репозиторий для объекта A и вызываю метод сохранения. В этом сохранить метод у меня есть этот код ±
public bool Save(ObjectA obj)
{
using(MyContext context = new MyContext())
{
context.objectAs.AddObject(obj);
context.SaveChanges();
}
}
Этот код, делает сохранить новую запись в базу данных, но это также создает новую запись для объекта B! Я не хочу этого, потому что объект B уже существует в базе данных! (Я выбрал это из выпадающего списка).
Это, как я заполнить мой выпадающий:
В хранилище objectB:
public IList<ObjectB> GetAll()
{
using(MyContext context = new MyContext())
{
IList<ObjectB> objects = context.objectBs.ToList();
return objects;
}
}
В моей форме:
ObjectBRepository rep = new ObjectBRepository();
IList<ObjectB> objects = rep.GetAll;
cmbBObjects.Datasource = objects;
// etc..
Так что мой вопрос, что я должен делать сохранить объект A без создания новой записи для объекта B?
Спасибо. Я не понимаю предложения 1. Второе предложение: в репозитории объекта A сделайте что-то вроде: 'var obj = context.ObjectB.where (b => b.Id == objectA.myObjectB.Id) .firstOrDefault() ; context.ObjectA.Attach (OBJ); 'Это правильно? – Martijn
Я отредактировал свой ответ. –
@LadislavMrnka: Точно, все возможные варианты, и я полагаю, что второй вариант лучше всего для примера выше. +1 –