|
Quote: Ok , and why EF does not keep the records that are in local cache , but instead "use the information" that those records are not show up in the result set of database ? And why in the case of modified records , "the information from database" is not used , and it's just keep the records from local cache.
That made no sense at all.
EF maintains a cache of objects reconstituted from result sets returned by the database. Once the result set is returned, there is no connection between the objects and the database. If the database changes, EF gets no notification at all that anything happened to the database copy.
If you have modified records, EF maintains the original "as loaded" copy of the object and the modifications to it. When EF goes to update the records in the tables, all of the original field values go into the WHERE clause of the SQL DELETE OR UPDATE statements. If any of those fields do not match the current data in the fields in the database table, the query fails to update the record because of a concurrency problem. You're not updating the latest version of the record. You're trying to update a newer version of the record than what you retrieved. That is a problem not solved by EF or the database.
Seriously, go Google "database concurrency" and start reading.
desanti wrote: If the cached data is modified , i think EF should let the programmers to choose
And how do you propose you do that in the EF code? EF avoids the problem by not handling it at all, letting YOU decide how to handle it, which is why you even asked this question in the first place because of performance. Having EF do it internally will not make it any faster. It still has to same limitations you do handling it yourself, row-by-row from the cached data.
There is no solution to the performance problem! Again, your only chance at making either of the two solutions "faster" is to cache less data at the client.
|
|
|
|
|
Quote: And how do you propose you do that in the EF code? EF avoids the problem by not handling it at all, letting YOU decide how to handle it, which is why you even asked this question in the first place because of performance. Having EF do it internally will not make it any faster. It still has to same limitations you do handling it yourself, row-by-row from the cached data.
With "Letting in the hand of programmers" , i mean informing them some rules , that if the local data is modified and they try to load from database , the local cache will be overwritten. So before loading from database , save or Undo those changes , but if you want to do without save or undo , you will loose those changes. I think is simple . The police does not close the road for people because there are cars moving on it. But there are semaphores and people are informed that when the semaphore is green the can walk safely, if is red they should not walk but they are free to do , keeping the risk by itself.
|
|
|
|
|
desanti wrote: hat if the local data is modified and they try to load from database , the local cache will be overwritten
So is that behavior desirable in all applications and situations? Nope.
So how do you configure that behavior in code, and all possible variants? Like either keeping the modified data, dumping all the modified data, or just keeping some of it and replacing the rest, or replacing some of it based on rules, or dumping some of it based on rules, ... there's too many possibilities to list... And that's the exact reason why it doesn't show up in ORM's.
You're trying to get EF, and ORM's in general, to do something that is best left up to the coder. Hell, that's even what you said in your previous post!
By the way, your analogy doesn't even apply to this.
|
|
|
|
|
Quote: So how do you configure that behavior in code, and all possible variants? Like either keeping the modified data, dumping all the modified data, or just keeping some of it and replacing the rest, or replacing some of it based on rules, or dumping some of it based on rules, ... there's too many possibilities to list
no no , i'm telling that EF could have some rules , for example if you load data from database ( with a special command like reload ) the cached data will be overwritten. So a programmer can use this and i think it's easy to resolve the situations.EF has a Reload command but for a single object at time . If a have a list of entries that i want to reload , i should do one by one ??? why not all with a single command !!!!
By your opinion , better to have a full working Reload command and let programmers to resolve the possibilities . or to have something like my second solution where i'm fooling EF telling that those objects are detached in order to resolve my problem ????!!!
|
|
|
|
|
Sorry , I found a new way :
Dim contextobj = (CType(context, IObjectContextAdapter)).ObjectContext
contextobj.Refresh(RefreshMode.StoreWins, context.myobjs.Local)
contextobj.Refresh(RefreshMode.StoreWins, context.mychilds.Local)
Is there anything wrong with this method ?
modified 4-Apr-19 8:31am.
|
|
|
|
|
Technically, no.
As far as your business rules go, you're the only one who would know.
|
|
|
|
|
Then , really I don't understand why a such method does not exist on DBContext directly but I should use objectContext.
Because the option StoreWins means that the local cache will be overwritten with new data on my database , we have discussed this on our conversation.
|
|
|
|
|
I've already said my piece. I'm out.
|
|
|
|
|
hi everyone
i am new in developpement vb.net so i ask if i can import a text file to a datagridview i want a datatable because i want after to add a new column that came from database
please help
|
|
|
|
|
You could import a text file directly to a datatable without storing it in a database.
However, the basic steps you need to perform:
1) Create a database table with columns defined to match the type of data that you want from the text file. Ex: Integer, date, Varchar, etc
2) create your VB program to loop through the text file parsing the data into the columns you want to store.
3) Execute a database INSERT statement to load the data on a line by line basis.
As you can see, this is a very vague solution. What area do you need help with?
Do you know how to create a database table? CREATE TABLE
Do you know know how to write a program to read a text file line by line?
Do you know how to parse a line into various fields?
Do you know how to execute an INSERT statement ?
Your question seems to be as vague as my proposed solution. Post a specific question so the group can answer it.
Good Luck.
|
|
|
|
|
i know all of that,my problem is how to manage to import ths txt file and data from database to a single datagridview
|
|
|
|
|
|
but this code is written in c not vb
|
|
|
|
|
It's C#, and the actual code snipppets are small enough that you can easily convert it VB.NET.
|
|
|
|
|
ok thanks i will make a try
|
|
|
|
|
Message Removed
modified 5-Apr-19 3:56am.
|
|
|
|
|
I'm trying to add a custom tooltip to my datagridview(s). In my research I know that the System.Windows.Forms.DataGridViewCellMouseEventArgs has no mouse hover event so instead I am using System.EventArgs. My problem of course that the mouse hover event only fires once on the datagridview until the user moves the mouse off the control. I need the event to fire each time the user hovers over a new row. Is there a way to reset the hover event on mouse move within the same control? I have searched and cannot find anything on this.
Here is my code which works perfectly but as mentioned only fires once.
Private Sub dtgNewMrs_cellMouseHover(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles dtgNewMRs0.MouseHover, dtgNewMRs1.MouseHover, dtgNewMRs2.MouseHover, dtgNewMRs3.MouseHover, dtgNewMRs4.MouseHover, dtgNewMRs5.MouseHover
Dim remMRNum As String
Dim remMRLin As String
Dim tTip As String = Nothing
Dim tCount As Integer = 1
Dim grvScreenLocation As Point = sender.PointToScreen(sender.Location)
Dim tempX As Integer = DataGridView.MousePosition.X - grvScreenLocation.X + sender.Left
Dim tempY As Integer = DataGridView.MousePosition.Y - grvScreenLocation.Y + sender.Top
Dim hit As DataGridView.HitTestInfo = sender.HitTest(tempX, tempY)
Dim chkRemarks As DataTable = rSet.Tables("RemarksMR")
With sender
remMRNum = .Rows(hit.RowIndex).Cells(3).Value
remMRLin = .Rows(hit.RowIndex).Cells(4).Value
Dim tQry = (From rems In chkRemarks.AsEnumerable()
Where rems.Field(Of String)("MR_Num") = remMRNum And
rems.Field(Of String)("MR_Line") = remMRLin).ToList()
Dim r = From t In tQry
Select t
If r.Count > 0 Then
For Each row As DataRow In r
tTip = tTip & Str(tCount) & ". " & row.Item(3) & Chr(13)
tCount += 1
Next
End If
End With
remTip.SetToolTip(sender, tTip)
|
|
|
|
|
Have you investigated How to: Add ToolTips to Individual Cells in a Windows Forms DataGridView Control (google) in which case you do not have to use Hover.
|
|
|
|
|
I've tried this implementation and it works but I am wondering if there
are any underlying problems with it; ie Loading Panel at runtime. I am
not that experienced in VB.
Thanks
Class MyClass
Inherits UserControl
Private WithEvents _MyParentPanel As Panel
Private Sub PChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.ParentChanged
Me._MyParentPanel = CType(sender, Control).Parent
end sub
Private Sub ParentScrollChange(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles _MyParentPanel.Scroll
' Handle change
End Sub
End Class
-- modified 27-Mar-19 11:48am.
|
|
|
|
|
What happens if Parent is not a Panel ?
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Yeah, there's lots of problems with it.
We'll start with your assumption that the control will over ever be dropped on a Panel control. What if you accidentally drop it on a Form instead? You're code is going to throw an exception and the designer is going to show a problem that prevents rendering it and you'll probably freak out when that happens.
A control can have many different control types as a parent. Change the references "Panel" to "Control" so you can support different container controls, including a Form since the Form class derives from Control.
It's also not a good idea to rename your event handlers, specifically PChanged , to whatever is shorter. It make the code harder to read and understand without your eyes darting to the end of each line to figure out which event this method handles. Your name is also not descriptive at all. What's a "P" and what changes about it?
|
|
|
|
|
To All,
Sorry for not providing enough information. I was focused on the implementation
of whether Me._MyParentPanel = CType(sender,Control).Parent had any underlying issues
as far as 'attaching' the control to the Panels Scroll event because of loading
_MyParentPanel at runtime.
I understand and agree with the issues you raised but:
This control is for a specific application and will not be dropped onto the Panel or be
used for any other purpose.
It is created by a button click from the Panel and is added by the Panel onto the Panel.
Thanks
|
|
|
|
|
speedbump99 wrote: This control is for a specific application and will not be dropped onto the Panel or be
used for any other purpose.
Famous last words. Controls always start out that way, but then next year, "Hey! We've got this control we want to use somewhere else..."
Do it right the first time.
|
|
|
|
|
Thanks Dave,
This app is for my personal use only and I am 'infinitely' sure that this
control will never, ever, ever be used anywhere else. But I do appreciate
your input.
Best regards.
|
|
|
|
|
Hello !
I'm using entity framework 6 with sql server 2008r2.
I have a bindingsource :
Mybindingsource.datasource=(From t in context.myobjects order by t.name select t).ToList
Now , I want to search inside the bindingsource , and get the found item's index.
I'm using this code :
Function findindex(startposition as integer) As integer
Dim p as Myobject
Dim i as integer
For i=startposition to Mybindingsource.count-1
p=MyBindingsource.item(i)
if p.value=3 then return i
Next
return 0
End Function
This code is working , but when the bindingsource contains too many itmes , is very slow.
Is there any faster way ?
Thank you !
modified 26-Mar-19 21:13pm.
|
|
|
|
|