C# - NHibernate: Getting Multiple Entities With Subset Of Child Collection?
Jan 16, 2010
My classes look something like this (I include only the relevant properties):
public class Order
{
public virtual Customer Customer { get; set; }
public virtual IEnumerable<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
public virtual string Product { get; set; } // Simplified
}
Now I What I want is to create a detached criteria that selects all orders for a given customer, and at the same time retrieves only the first 10 OrderLines for each order. The first part is easy:
Customer someCustomerObject = ...; var criteria = DetachedCriteria.For<Order> ).Add(Restrictions.Eq("Customer", someCustomerObject);
But how do I instruct NHibernate to retrieve eagerly the first 10 orderlines for each order retrieved by the criteria above?
I've tried using a Filter based on the following example (taken from Nhibernate documentation):
But when I give Order.OrderLines to the CreateFilter method, it retrieves all orderlines first, and then afterwards retrieves the 10 first orderlines, which is not what I want. I also tried combining this with a call to NHibernateUtil.Initialize to no avail.
How do I create a detached criteria for this problem? Or, if that is not entirely possible, how to I retrieve, for each order, the 10 first results only, without fetching the entire collection?
i am having a little problem in mapping all the entities in contained in the namespace "nhibernateTest.Domain" . it basically contains all the Map Classes like , StudentMap, DepartmentMap etc. .. now in case of normal nhibernate what we used to do is :
[Code]....
now what it used to do is . look for all the "*.hbm.xml" files in my namespace and automatically map them...
how to do the same for fluent nHibernate ? so that it looks for all map classes in folder
"nhibernateTest.Domain" ...resolve the namespace "nhibernateTest.Domain"... and automatically map them so that i dont have to create the session separately for diffrent Map classes ?
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."
I'm trying to create a view that will allow me to create an entity record and also child entities for that record. I have an entity type called "Parent" and I have a child entity called "Child". I want to be able to allow the user to create a Parent including adding several Children and their details, and the npost them all back to the controller from a single view. I found an example on how I would kind of do something like this here: [URL]. The problem with that example is that you can't refer to entities using bracket notation so it only works for those lists. Is there a way to insert hierarchical entity data using MVC from a single view in a single post back?
I'm using ASP.NET MVC 2 and am struggling with saving child entities. I have an existing Invoice entity (which I create on a separate form) and then I have a LogHours view that I'd like to use to save InvoiceLog's, which are child entities of Invoice. Here's the view:
In the SaveHours action, it properly sets the values of the InvoiceLog entities after I call TryUpdateModel but when it does SaveChanges it doesn't update the database with the new values. Also, if you manually update the values of the InvoiceLog entries in the database and then go to this page it doesn't populate the textboxes so it's clearly not binding correctly.
I'm pretty new to MVC 2 using the Entity Framework. I have two tables Company {ID int identity PK,Name nvarchar} and User {ID int identity PK,UserName nvarchar,CompanyID int FK}. A Foreign Key exists between User and Company.I generated my ADO.NET Entity Data Model, a Controller and a view to insert a record. My HTML form has the fields Company and UserName and the is when I click save a Company and User is inserted into the database. Sounds straight forward right!
My question is as follows:
I created a strongly-typed view derived from my 'User' entity. I'm using the the html helper Html.TextBoxFor(model => model.Organisation.Name) but the html name attribute for this input field is 'Organisation.Name'. My problem with this is that the dot throws up all sorts of issues in JQuery, which sees this as a property. If I want to change the name I read that I can use DataAnnotations but because I used the Entity Designer this involves using Buddy Classes. Seems like a bit of overkill just to change the html name attribute on this input field.
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...
I want to be able to update a model and all its collections of child objects in the same view. I have been referred to these examples: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx and http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ .
For example, I have an object Consultant, that has a collection of "WorkExperiences". All this is in an Entity Framework model. In the view, the simple properties of the Consultant object is no problem, but the collection I cannot get a textbox to show up for. I tried following the examples in the links above, but it doesn't work. The problem is, in those examples the model is just a list (not an object with a child list property). And also, the model again is an EF model. And for some reason that doesn't seem to work as in those examples.
[Code]....
This stuff with the EditorTemplate works fine in Phil Haack's sample project, which I downloaded to try, but here, with the EF model or whatever the problem is, I don't get any textbox at all. The table in the view is just there as a test, because in the table I do get the rows for WorkExperiences, whether I add an empty WorkExperience object or fill out its properties doesn't matter, the rows show up for each object. But again, no textbox...
I have two databases. One from Oracle 10g. Another from Mysql. I have configured my web application with Nhibernate for Oracle and now I am in need of using the MySQL database. So how can i configure the hibernate.cfg.xml so that i can use both of the database at the same application?
I have the following code for the SelectedIndexChanged event of a drop down list. This works fine as it is but this entity has a relationship to another entity (Genre). if i change the select statement to { m, m.Genre.MovieGenre }).ToList(); it doesnt work as contains anonomyous types.
In the code bdehind && syntax does not work, any ideas?
Entities ctx3 = new Entities(); var uniqueQuote = from quot in ctx3.Quotes.Include("aspnet_Users").Include("Enquiries") where quot.Enquiries.EnquiryId == selectedEnquiryId && [code]...
Error 2 Delegate 'System.Func' does not take '1' arguments C:LocalGarageFinderLocalGarageFinderEnquiryDetail.aspx.cs 56 33 LocalGarageFinder
I have a model that consists of Order, OrderLine, Product.
I want to create an Order and add OrderLines (each OrderLine related to a Product). I create the Order and add new OrderLines to it. Between posts I store the Order entity in Session (or ViewState). Just so you know I have added suppport for binary serialisation which works fine.
The relationship is therefore Order > OrderLine(s) > Product(s).
You might have already guessed what the problem is - that when I SaveChanges() I get the usual 'AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager.' error.
I have referred to a number of articles online but none seem to handle this case (where I have the relationship across more than two entities) e.g. [URL].
This must be a very common requirement surely? Is there anyone out there doing the same kind of thing with Entity Framework (and without using DTOs etc)?
I have a dozen dropdowns and each one is bound to an SP. The page was taking much time to load as time times db is getting connected and sps are called.I thought of using a single sp returning multiple recordsets and iterate through each record set.
Ex:create procedure getdeptsemps as begin select * from emp select * from dept end
I am able to iterate through both the result sets using NextResultset but all I need to know is, how I can assign the recordset into multiple entities like Emp and Dept ?I will assign these Emp and Dept into corresponding dropdown lists.
(Using SQL Server 2008 and ASP.NET MVC2)I have a simple business table and a category table. I have a 3rd table to map business to category, a many-to-many relationship. the Map table contains a BusinessID and CategoryID. I'm lost as to how I can load the categories into my Business View Model using the entities model.Without incorporating categories, my code looks like this:
[Code]....
with Business View Model defined as:
[Code]....
but if i want to populate the Categories with the mapped categories, how would one do that?
I have a datamodel with a couple of tables. One of my tables have about 40 fields (I know that is a lot, but we have to keep the structure in place as we are upgrading a classic ASP project to MVC). Some of my Actions only updates 1 or 2 fields in my table.
Is there a way to create Entities, for instance, that only contains the contact details of the client table, and not any other details, and then another entity that contains only the address details. I don't want to submit the entire row when I only update telephone details, or the client's picture.
i have a list 1,2,3,4,5,6,7 and the batch size is 2.batch size 2 means for every 2 numbers i need to call a functionsomething like "1,2" "3,4" "5,6" "7"is there a nice way to do this in Linq C#
while() { var templist = mainlist.getelementsFrom(0,2);; pass templist to another block update indexes so that next time the line would be templist = mainlist.getelementsfrom(3,5) }
I am using Asp.net and requirement specifies i use html input to post files to server rather than asp:fileupload.[ Reason : Add more html input file controls similar to CPanel file manager.(i.e) clicking on link adds another file input from which user can select another file*.But when ever i post back Request Files collection is always empty.* HTML FORM:
<form method="post" enctype="multipart/form-data" action="documents.aspx"> <div> <input type="file" name="attachment" id="attachment" onchange="validate(this)" /> <span class="none">Filename should be within (1-25) letters long. Can Contain only letters & numbers</span> <div id="moreUploads"> </div> <div id="moreUploadsLink" style="display: none;"> <a href="javascript:addFileInput();">Attach another File</a></div> <input type="submit" id="btnSubmit" /> </div> </form>
Javascript:
var upload_number = 2;function addFileInput() { try { var fileUpload = document.getElementById("attachment"); var elemSpan = nextElement(fileUpload).cloneNode(true); var elemDiv = document.getElementById("moreUploads"); var d = document.createElement("div"); var file = document.createElement("input"); file.setAttribute("type", "file"); file.setAttribute("id", "attachment" + upload_number); file.setAttribute("onchange", "validate(this)"); d.appendChild(file); d.appendChild(elemSpan); elemDiv.appendChild(d); upload_number++; } catch (err) { alert(err);}}
the validate(this) is a function that validates file types on client.When validation succeeds then the link to add more file inputs is enabled. Could someone throw somelight on this.
We are starting a new web based product in which we are planning to expose our business logic through WCF services. We will be using ASP.NET 4.0, C#, EF 4.0. In future we want to build iphone applications and WPF applications based on the services. I have been reading a lot about using POCO vs Self Tracking Entities (STE) and from my understand the STEs do not work well with the web scenario.
By picking MVC for developing our new site, I find myself in the midst of "best practices" being developed around me in apparent real time. Two weeks ago, NerdDinner was my guide but with the development of MVC 2, even it seems outdated. It's an thrilling experience and I feel privileged to be in close contact with intelligent programmers daily. Right now I've stumbled upon an issue I can't seem to get a straight answer on - from all the blogs anyway - and I'd like to get some insight from the community. It's about Editing (read: Edit action). The bulk of material out there, tutorials and blogs, deal with creating and view the model.
So while this question may not spell out a question, I hope to get some discussion going, contributing to my decision about the path of development I'm to take. My model represents a user with several fields like name, address and email. All the names, in fact, on field each for first name, last name and middle name. The Details view displays all these fields but you can change only one set of fields at a time, for instance, your names. The user expands a form while the other fields are still visible above and below. So the form that is posted back contains a subset of the fields representing the model. While this is appealing to us and our layout concerns, for various reasons, it is to be shunned by serious MVC-developers.
I've been reading about some patterns and best practices and it seems that this is not in key with the paradigm of viewmodel == view. Or have I got it wrong? Anyway, NerdDinner dictates using FormCollection och UpdateModel. All the null fields are happily ignored. Since then, the MVC-community has abandoned this approach to such a degree that a bug in MVC 2 was not discovered. UpdateModel does not work without a complete model in your formcollection. The view model pattern receiving most praise seems to be Dedicated view model that contains a custom view model entity and is the only one that my design issue could be made compatible with.
It entails a tedious amount of mapping, albeit lightened by the use of AutoMapper and the ideas of Jimmy Bogard, that may or may not be worthwhile. He also proposes a 1:1 relationship between view and view model. In keeping with these design paradigms, I am to create a view and associated view for each of my expanding sets of fields. The view models would each be nearly identical, differing only in the fields which are read-only, the views also containing much repeated markup. This seems absurd to me. In future I may want to be able to display two, more or all sets of fields open simultaneously.
I'm using RegularExpressionValidator controls to impose password rules when creating new passwords. I want to avoid repeatitons such as 'aaaa' or sequences such as '12345' in the password.
How do I write the validationexpression to a RegularExpressionValidator to impose this rule? I do not want to do thing using C#, just with a regular expression that could be put within the validator control like below:
how to export only a subset of columns from Gridview to excel? i'm sure there are examples online, but have not been able to get the right kinda examples.
I have a list of objects that I want to bind to a gridview. Creating that list and binding it works fine for most of the public properties in that list.
There are some objects contained in each of those objects... for instance there is an Address object.
object.Address.Line1;
object.Address.Line2;
When I bind this to my gridview, I have no issues with stuff like object.DateRegistered, but how can I access things like object.Address.WhatEverProperty? I always get this error:
"A field or property with the name 'xxx.xxxx' was not found on the selected data source."