2013-04-02 4 views
1

Может кто-нибудь помочь?Не удается сохранить запись, используя Entity Framework

Я - абсолютный новичок. Но я обыскал сеть. В VB не так много примеров, показанных в VB.

Я создал тестовый проект, который содержит форму выигрыша. Затем добавлен еще один проект, который содержит модель Entity, после создания модели я добавил ссылку на проект формы Win. После этого я добавил объект Model в качестве источника данных.

Я перетащил элементы управления источниками данных в форму и добавил код ниже.

Private context As TestModelEntities 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    context = New TestModelEntities 

    Dim query = context.employees 
    EmployeeBindingSource.DataSource = query.ToList 




End Sub 

Private Sub DepartmentBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EmployeeBindingNavigatorSaveItem.Click 



    Try 
     context.SaveChanges() 
     MessageBox.Show("Changes saved to the database.") 
     Me.Refresh() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
End Sub 

Я царапаю голову весь день. Не знаю, что я делаю неправильно.

ответ

0

В вашем способе DepartmentBindingNavigatorSaveItem_Click, похоже, что вы ничего не добавляете к context перед вызовом context.SaveChanges().

Таким образом, Entity Framework не знает о каких-либо вновь добавленных сущностях и не сохраняет их.

Попробуйте добавить объекты в контекст, а затем позвонить context.SaveChanges().

UPDATE

Вот статья MSDN о добавлении/Прикрепление сущностей в контексте: Entity Framework Add/Attach and Entity States

К сожалению, это в C# (я не мог найти перевод или эквивалент статьи в VB.NET) , но идея одинаков для добавления или присоединения Employee (или Department) в ваш контекст до SaveChanges().

+0

Спасибо, Филипп, я понимаю, что это одно из преимуществ использования структуры сущности. Он отображает текстовые поля в поля базы данных. Возможно, я ошибаюсь. Но я следовал примеру MSDN http://msdn.microsoft.com/en-us/data/ff706685.aspx. – Anup

+0

@ Я не использовал EF с Windows Forms (я использовал его с ASP.NET Web Forms и ASP.NET MVC). В конце концов, даже если вы найдете способ привязать текстовое поле к полю сущности, вам все равно нужно добавить его в контекст перед вызовом SaveChanges, иначе нет изменений для сохранения. Я бы начал с простого примера: новый сотрудник Employee (или любой объект объекта, который вы используете), добавьте его в контекст и вызовите SaveChanges и убедитесь, что он сохранен. –

+0

Вы имеете в виду, что мне нужно написать someting like, context.table.field = AutoGeneratedTextBoxes.text для каждого поля? – Anup

0

Я немного запутался в вашем вопросе, но у меня могут быть некоторые советы, которые могут помочь. Во-первых, как сказал @Philip Tenn, вам нужно добавить все, что вы создаете, в контекст. Это очень просто в vb.net, просто напишите:

Context.Table.Add (Object2Add).

Это поместит объект в эту таблицу данных. Теперь, когда вы запрашиваете, вы должны сказать что-то вроде:

Dim MyQuery как IEnumerable (из DataTable) = (из контекстного контекста) .ToList.

Это позволит получить все из этой таблицы данных и сохранить ее в списке. Одна из проблем, которые могут возникнуть с вашим кодом, заключается в том, что контекст должен быть объявлен внутри каждого суб отдельно (так что Dim Context как новый TestModelEntity) или глобально (так что Public Context как новый testModelEntity (это вне ваших подписчиков)). Я знаю, что я опаздываю на несколько лет, но, надеюсь, это помогает кому-то!

Смежные вопросы