C# - System.Data.Linq.ChangeConflictException - Row Not Found Or Changed
Feb 2, 2010
I wasted the better part of the day on this and am no closer to a understanding the issue than what I was this morning.
I am looping through a set of objects and marking them for deletion. The 2nd one always causes the above exception. tb_invoice has a FK to tb_shipment.
As always, I am probably missing something very obvious, but I have stripped out so much from this code already that there is nothing left, and I am still getting this exception. This is a local SQL 2008 instance and there is of course nothing and nobody changing the invoice in between reading them and calling SubmitChanges().
myDataContext db = new myDataContext();
IQueryable<invoiceDetail> pendingInvoices
db.GetInvoiceDetailPending();
foreach (invoiceDetail id in pendingInvoices) {
tb_shipment s = db.GetShipmentById((Guid)id.shipment_id);
db.tb_invoices.DeleteOnSubmit(
db.GetInvoiceById(s.tb_invoices.FirstOrDefault().id)); }
SubmitChanges(); // fails for the 2nd invoice
}
System.Data.Linq.ChangeConflictException: 2 of X updates failed. at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) at PROJECT.Controllers.HomeController.ClickProc(Int32 id, String code, String n)
This is what I get very often. This action is done thousands of times a day, and I get this exception about once every 5 seconds. From what I understand it happens when something changes in the database in the period between creating DataContext and updating it. Am I right?How can I fix it?I just debugged the error and found the following:
[Code]....
The Stats table is updated constantly. So how can I still make LINQsave the changes. With "classical" MS SQL access through SqlDataCommand I never had problems like that.
For our ASP.NET project for school we had to build a sport event management web application.
We provide the application in three languages (English, Dutch & French) which you can switch all the time. This has worked all the time for all users, well that's what we think anyway.
Yesterday I found out that switching from one to another language isn't working for 2 of our users. So I started testing a bit and I always got this error.
I'll try to explain what happens behind the doors when changing the language:
First of all the current language is saved in a session so we don't have to check the user row every time a page loads. Besides that we save the language in the users row in the database.
When I try to Update or Delete a single selected item, it throws a "Row not found or changed." exception. Basically I only did a linq query and use most of the auto-generate function. I added LinqDataSource1_ContextCreated function,
The following references to user controls give the error "Row not found or changed." However, when I remove any one of the references, the results are perfect and everything displays fine.
I'm using Membership but allow to change UserName of specified user. I had user named Customer bound to role Customer, and then his username was changed to 123. Then i try to do something to get Roles of this user and get an error or empty result.
I've just used Visual Studio to create a linq to sql class. In the .designer.cs file the code includes:using System.Data.Linq;However, when I compile the projeget:Compiler Error Message: CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)The code is completely generated by Visual Studio
I am using System.Linq.Dynamic to create the following query at runtime:
[Code]....
I can then successfully display vMediaQ in a GridView.But I need to be able to access the individual fields (column headers and data) in vMediaQ, which is of type System.Linq.IQueryable.
I have a System.Data.Linq.DataContext object and need to know the proper way of closing it out before it goes out of scope in order to prevent the following error when making a bunch of database changes:
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Can I just call obj.Dispose() or do I need to call obj.Connection.Dispose() or obj.Connection.Close()?
I guess what I want to know is will calling obj.Dispose() end up executing the functionality in obj.Connection.Dispose() and obj.Connection.Close(). The MSDN documentation that I found on these functions does not have this information (at least I didn't see it - I could have mistakenly overlooked it).
I have downloaded Visual Web Developer 2010 Express and am trying to use LINQ. In order to do that I have added a LINQ to SQL class to the web site and have dragged tables from the database view into the LINQ designer, which worked fine.But..When I add: using System.Data.Linq;to MainPage.xaml.cs, I receive an error:
Error 3 The type or namespace name 'Data' does not exist in the namespace 'System' (are you missing an assembly reference?)Even although I have references to System.Core, System.Data, System.Data.Linq in the website references.
I need a linq-to-sql use dbml, then I follow this article : http://www.west-wind.com/weblog/posts/147218.aspxSet the child to internal, set serialzable to unidirection and add updatecheck=never
Is there a way to do the following in VB:dim sTableClass as string = <my underlying table class in linq>dim dbTab as system.data.linq.table(<typed class of sTableClass>)I've tried cycling through the table objects of the linq data context and retrieved the following: Dim ddData = pkDB.GetTable(tt.RowType.Type.UnderlyingSystemType)(where tt reflects the row of the table I want to retrieve) But the expression returns and itable and I need the table equivalent but can't get this to work with a stri
I am trying to get the following code behind to store a file in a datbase using Linq (with *dbml). I am getting an intellisense error in my "For each" loop the says the following":Value of 'Byte' cannot be converted to 'System.Data.Linq.Binary'I have been searching for awhile, but I can't seem to find a solution that has worked for me yet.
I have an ASP.NET page where at the top of the page is a search box. There are 2 text boxes - one is an autocomplete extender for the Name on a database, and one is just inputting the ID.The page features DetailsViews and GridViews primarily, and even when no account has been searched for, these display blank data which is not ideal. I sort of fixed this by using if (IsPostBack), encasing the elements in a placeholder and setting it to visible only if the page ispostback. But this doesn't cover if the user types in an incorrect ID.
Also, some accounts have huge amounts of data inside the GridView's. I had an issue where because I have no way of detecting when a data source's rows has changed, I end up binding whenever the page loads (Page_Load method). I've come to realise this is simply very bad - there are lots of times when the user can click various things in the page and have the page postback, and it takes an eternity to load each time I click something for accounts with lots of data.Anyway, my question is essentially two-fold but I have a feeling the solution will be similar:1: How can I detect when there are no accounts returned when searching, and disable the Grids/Detailsviews and show an error message?2: How can I figure out when the user searches for another account and only rebind the grids after that has happened?
I wanted to delete the record from data but I receive this error "Unable to cast object of type 'System.Data.Linq.DataQuery`1[training_eval.Course]' to type 'training_eval.Course'.
Dim eval_sure = From ev In db.Evaluates Where ev.course_id = indexcourse Select ev.course_id Dim del_course = From c In db.Courses Where c.Course_id = indexcourse db.Courses.DeleteOnSubmit(del_course) db.SubmitChanges()
I have a strange problem. I am adding a LinqDatasource object, and set the context:
[Code]....
Then I get this error:The type 'System.Data.Linq.DataContext' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
I have some apps that are in 2.0 and I have 4.0 installed.WHen I build I get the error that targetFramework is only for 4.0 and to remove it for earlier versions.
If I delete the targetFramework entry I get:Type or namespace Linq does not exist in namespace system.I can't upgrade some of the sites and can't delete link from the usings on all of the pages.What can I do and why is Linq the only using that causes the problem?