C# - In LINQtoSQL, How To Update Child Relationships By Editing The Parent Model
Oct 5, 2010
This is my first attempt at updating a database using LINQtoSQL. At least, it's my first if you don't count the tutorials I've followed. Unfortunately, The tutorials that I have found don't offer much more than updating a single table. I'm attempting to update a DB Model that's a bit more complex.
I am just getting started with entity framework with asp.net 3.5 using VS 2008
There are two tables, Categories & Subcategories:
Category table: CID, CategoryName Sub Category table: SID, CID, SubCategoryName I would like to get SID, CID, CategoryName, SubCategoryName in the gridview. Just as we write a select statement i.eSelect a.sid, b.cid, b.categoryname, b.subcategoryname from subcategories a inner join categories b on a.cid=b.cid & put the same in a gridview.
I was trying for the whole day & couldnt get atleast one url that would teach how to do it.
how controls (txtbox, radio, etc) are mapped to properties in my Model. Now to the next part : My scenario (example):
Model: three tables: tblPerson, tblPersonOptions, tblOptionsConfig UI: Person Name: ______ (required) Person Age: ________ (required)
radio button: Does Person want to select options? Yes / No ? (required) If yes, then show a checkbox list of options from tblOptionsConfig: (required if yes above). Scenario I tested:
Person Name: Tester User Person Age: Left blank (check if validation error is thrown) Radion button: Yes. in options check ..let's say 3 out of 5 options. The UpdateModel throws the validation error and the page is returned back to the view(add.aspx).....................
public class ComponentType { public int ComponentTypeID { get; set; } public string Component_Type { get; set; } public string ComponentDesc { get; set; } } [code]...
This is part of a larger problem which has plagued me for a while now (see "EntityCollection already initialized" error with entity as model in Asp.Net MVC? for the entire picture).
But I found a web site with someone who had faced a similar problem and apparently solved it for his needs [URL]. I tried it, but had to make some modifications to fit my code, and the helper methods supplied by a tutorial by Steven Sanderson (see previous post).
I'm very close it seems, but not quite:
UpdateModel(consultant, "Consultant"); if (vm.Programs != null) //Unnecessary? Can it even be null if it's initialized from the model? for (int i = 0; i < vm.Programs.Count; i++) { Program formProgram = vm.Programs[i]; Program modelProgram = consultant.Programs.SingleOrDefault(x => x.Id == formProgram.Id); if (modelProgram == null) _repository.AddProgram(formProgram); else modelProgram = formProgram; UpdateModel(modelProgram); //Doesn't work. The modelProgram object does get updated with the correct property values, but it isn't saved to the repository... } _repository.Save();
Although this follows the example on the site above, and the modelProgram does get updated with the changed properties, these values are not saved to the database on _repository.Save() on the Consultant object, even though the modelProgram object is a reference to a Program object on the Consultant... What am I doing wrong?
I am using the Entity Framework by the way, if it isn't clear.
(BTW, if anyone has any input on the previous question and the whole picture, that would be welcome too, it is still unresolved).
UPDATE: There was apparently a mistake in here: UpdateModel didn't actually do any updating, I had just referenced a different object (the one in the viewmodel) for the modelProgram, so of course it had the right property values. I still want ideas for how to achieve this though...
Is there a way to create a contact form that takes the name. address and other info for the master record; Then, somehow, on the same page, allow the user to enter multiple contact info as chid records (i.e. phone, email, etc.)
All this using the Objec DataSource or SQL DataSource (which ever is easy) and doesn't require writing too much code.
Simple and blunt: my cascading dropdownlists clear when a postback occurs. Does anyone know a quick way around that?For more information, read on...
I have 5 dropdown lists that define a training class location and line of business: Site, Parent Client, Client, Program, Project I'm trying to build cascading dropdownlists that can work from any direction (i.e. select a site and all other lists are filtered by site...select a project and all other dropdown lists are filtered by project). I've built the SQL Select statement behind the lists that filters (accurately).
EF is so frustrating. I can't seem to be able to get my head around what I need to do so I can delete an object. I seem to be able to remove the object but not the related child objects. Can anyone tell me what is the rule of thumb when you want to delete all related child objects of a given object? I've tried loading all related objects like this:
Entry entry = ModelContext.GetObjectByKey(new EntityKey("ModelContainer.EntrySet", "Id", id)) as Entry; entry.ChildEnteries.Load(); if (entry != null) { ModelContext.DeleteObject(entry); ModelContext.SaveChanges(); }
I get errors related to the relationships: A relationship is being added or deleted from an AssociationSet 'EntryEntry'. With cardinality constraints, a corresponding 'Entry1' must also be added or deleted. Why can't I just load the object using modelcontext.GetObjectByKey and remove it along with its child objects? My other question is can I delete an object using Entity command like so? DELETE e from objectset as e where e.id = 1 I've tried few variations and all of them throw exceptions.
I'm using MVC 2 with some Models from a LinqToSql project that I built. I see that when I post back to a Controller Action after editing a form that has a DateTime field from the Model, the MVC Html.ValidationMessageFor() helper will nicely display an error beside the Date text box. This seems to happen automatically when the you test ModelState.IsValid() in the Controller Action, as if the MVC model binding automatically knows that the DateTime field cannot be empty.
My question is... I have some other string fields in these LinqToSql generated classes that are Not-Nullable (marked as Not Nullable in Sql Server which passes thourgh to the LinqToSql generated classes), so why doesn't Mr. MVC pick up on those as well and display a "Required" message in the ValidationMessageFor() placeholders I have added for those fields?
Sure, I have successfully added the MetadataType(typeof<t>) buddy classes to cover these Non-nullable string fields, but it sure does seem redundant to add all this metadata in buddy classes when the LinqToSql generated classes already contain enough info that MVC could sniff out. It MVC validation works with DateTime automatically, why not these Not-nullable fields too?
I have a parent gridview which has a child gridview in the itemsTemplate. Both are binded to different SqlDataSources. I can successfully update and delete rows in the child gridview. After updating in the child gridview, some related data in the parent gridview are not updated automatically. So i have placed ParentGridview.Databind() in the rowupdated event of child gridview. But it doesnt look working.
I am trying to trying to setup an updatepanel to update every X seconds, the problem is I don't want the control to actually refresh unless there is new data. So I currently have a child updatepanel in a parent UpdatePanel, the child updatepanel gets refreshed by a timer. But I can't seem to find a way to trigger the parent panel to update. Again, only when certain conditions(data changed) are met.
In my website I have two forms: parent form and child form(dialog box). Their expected behaviour is like this: if clicked on 'show' button on parent form, a dialog form opens that displays a gridview. In dialog form, if clicked on 'select' button it closes itself and returns value in selected row back to parent form.
To achieve this I write following code (.cs) : in parent form:
void ShowBtn_Click(object sender, EventArgs e)
{
StringBuilder jScript = new StringBuilder(); [code]....
Now problem is: the code in parent .cs works fine, it opens the dialog properly. But when clicked on 'select', instead of returning back to parent, it opens the same dialog again in new window. This newly open window says "Done but error on page" at left bottom.
Is it possible to refresh parent page from child's child page using javascript.
I have a webform which opens a child window, a button on child window closes the present child window and opens a subchild window. Now a button on subchild should close the window and refresh the parent form.
I made a few changes to the DB in SQL server management studio then right clicked on the .edmx doc to get it to update. That seemed to work fine but when i compiled the app everything that referenced the EF seems to be broken.The Error list now contains the below error for all classes that used it.
The type or namespace name '' could not be found (are you missing a using directive or an assembly reference?)
I have a nested child and parent UpdatePanel. The problem is, when the child UpdatePanel is refreshed/posted, the UpdateProgress in parent fires up. How can I prevent this? The structure is like this:
I am new to xml, i want to looping through the below xml and save the records in the database. the below xml is parent child combination, parts as to be saved under respective parents. if the source field is M then there will be child item for that.
In asp.net, I have a parent and a child control. Within the child control I have a dropdown list. Based on dropdown list's selected value I would like to toggle Visibility of Panel in parent control. For instance if I select Show in child control dropdown list, I need to pass true to parent control to make Panel visible and vice versa. How should I do that. I have read that can be done via the event handling and have seen certain scenarios but I am not clear on that.
i am working on POCO entities. i had a requirement to provide Edit feature for parent and respective Child records in single View.
Eg: Parent-Customer, Child-Order tables
when updating the parent entity by using => UpdateModel(CustomerIns);
and updating the child entity by using => TryUpdateModel(CustomerIns.Order, "Orders");
The Child Controls Names are like Orders[0].OrderID,Oders[0].OrderDate,etc
The Parent and Child Entities are updating when UpdateModel() is called but when saving Changes by calling Context.SaveChanges() i am getting exception like:
"The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted."
When I open two modalpopups, one over another, there is unexpected order.After click on "Open Parent Panel", and click on "Open Child Panel",Child Panel (newone) is under the Parent. [URL=http://img820.imageshack.us/i/un1f.jpg/][IMG]http://img820.imageshack.us/img820/5836/un1f.jpg[/IMG][/URL]Uploaded with [URL=http://imageshack.us]ImageShack.us[/URL]What should I do to get it in "normal order"?The code is: