을 만드는 다시 대를 엽니 DB 문맥을 떠나 내가 아주 간단한 윈폼 /이 엔티티 프레임 워크 (V6) 프로그램 :엔티티 프레임 워크 - 지속적으로
- 는 폼 요소 사용자가 클릭하면
- 를 채울 수있는 데이터베이스를 조회, 관련 정보를 그 정보에
- 수행합니다 계산을 얻기 위해 데이터베이스를-은 쿼리 재 사용자
EF에서 초보자이기로 표시 나는 '일의 예를 따르도록 노력했습니다 온라인을 발견했습니다과의 라인을 따라 조회 /를 채우는 매우 간단 뭔가 올라와있다 :
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Using ctx As New MyEntities
<Query DB to populate initial values for first combobox>
End Using
End Sub
Private Sub cboVal1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboVal1.SelectedIndexChanged
Using ctx As New MyEntities
<Queries to populate the other controls based upon user selections>
End Using
End Sub
Private Sub Button_Press(sender As Object, e As EventArgs) Handles MyButton.Click
Using ctx As New MyEntities
<Queries to get data, based upon user selections for calculations>
End Using
End Sub
내가 발견하고있어 보이는 부분은 내 프로그램의 속도를 느리게 할 수 있다는 점이다 (그리고 나는이에 대한 틀렸다면 정정 해줘 제발 - 내가 말했듯이, 나는 초보자 오전 내가있어하는 새로운 DB 연결을 내가 사용할 때마다 다시 설정)을 내 코드에서
Using ctx As New MyEntities
...
End Using
을 .
그래서, 내가 생각하고있는 것은 폼 레벨 변수를 갖는 것이다. ctx as MyEntities
- 폼로드시 커넥션을 닫고 폼 클로저에서 커넥션을 닫고 같은 것을 계속 사용하기 위해 의 라인 :
Dim ctx as MyEntities
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ctx = New MyEntities
<Query ctx to populate initial values for first combobox>
End Sub
Private Sub cboVal1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboVal1.SelectedIndexChanged
<Queries ctx to populate the other controls based upon user selections>
End Sub
Private Sub Button_Press(sender As Object, e As EventArgs) Handles MyButton.Click
<Queries ctx to get data, based upon user selections for calculations>
End Sub
Private Sub Main_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
ctx.Dispose()
ctx = Nothing
End Sub
나는이 방식으로 작동하는 것을 전환, 극적으로 증가 속도를 갖고있는 것 같아요, 나는 그것이 가능성이 DB에 나쁜 변경의 가능성에 나를 열어 둡니다 것을 알고 있어요,하지만 이것은 어떤 업데이트도하지 않는 작은 프로젝트입니다. 그냥 쿼리하는 것입니다 ... 합리적인 해결책입니까, 아니면 일을하는 것이 위험한 방법입니까?
일반적으로 작업 단위에서 DBContext를 사용해야합니다. 그렇지 않으면 데이터가 DB 컨텍스트 캐시 엔티티처럼 부실해질 수 있습니다. 동일한 쿼리를 두 번 수행하면 DB에 한 번만 기록됩니다. 나는 광범위하게 EF를 사용해 왔지만 이러한 방식으로 컨텍스트를 사용하면 비용이 많이 든다는 것을 결코 발견하지 못했습니다. 나는 당신의 경기 침체가 어디 있는지 좀 더 조사 할 것입니다. –
클래스를 상속하는 DBContext를 재 작성하는 데 많은 비용이 소요되는지 궁금합니다. repo의 각 함수가 DBContext의 자체 인스턴스를 사용하기 전에 저장소를 설정했습니다. 거기에 어떤 문제가있는 것 같지 않았지만, 다시 애플 리케이션은 매우 데이터 집약적 인 아니었다. EF로 작업 단위 패턴을 구현하는 방법에 대해서는이 기사를 참조하십시오 : http : //www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/asp-net-mvc-application에서 저장소 및 작업 단위 패턴 구현 – erdinger
로드 한 데이터를 변경할 필요가없고 데이터베이스에 다시 쓰지 않아도된다면 컨텍스트의 변경 추적을 해제해야합니다 (ctx.Configuration.AutoDetectChanges = false). 이것은 눈에 띄는 성능 향상을 가져다 줄 것입니다. –