DataSource Controls :: Linq To Entities - Multilevel Projection Into Business Class And Not Breaking Deferred Execution?
Mar 18, 2010
I have a problem. (this a simplfied example)
In Entity framework I have a class which is effectively
fooEntity
{
public Guid Id {get; set;}
and a collection of fooChildEntity
}
a fooChildEntity is again an entityframework class
fooChildEntity
{
public Guid kidId {get; set;}
}
Now I also have a pair of business layer classes foo and fooChild
foo
{
public Guid Id {get; set;}
ilist<fooChild> Children {get;set;}
}
fooChild
{
public Guid kidId {get; set;}
}
My aim is to write a linq to entites that will allow me to convert the entity foo and children into the business foo and children without breaking deferred execution ( I will be adding filters to reduce the recordset at a higher coding level in the business layer)
doing something like
this.context.fooEntity
.include(fooChildEntity)
.Select( fe => new foo { Id=fe.Id ,
fe.foreach(fec => Children.add( new fooChild { kidId = fec.kidId}))})
.AsIQueryable()
is plainly rubbish and would never compile - it is however an indication of the direction I was thinking .
Even if I got a foreach to work like that or similar it would break deferred execution
At this point there are around 300,000 foo entities which I will eventualy filter to 5 or 6 foo's - this is why deferred execution is needed.
I'm trying to update data with the EF I can't seem to get the EntityKey when I debug and hit this line befor I save changes _entities.ApplyPropertyChanges entityToEdit.EntityKey .EntitySetName, blogEntryToEdit); The EntityKey is null dose anyone have any idea how this key is set can't SaveChanges() without it _entities.ApplyPropertyChanges(entityToEdit.EntityKey .EntitySetName, blogEntryToEdit);
I trying to create a search mechanism for records in a EDM based on text entered on a text box in a web page.
For example, if I enter a partial name of a customer and/or state abrebiation for that customer on the Text Box (abc, TX)s, I want to search name and state fields in a Customer table in my database for matching customers.
I found a solution with the namespaceSystem.Linq.Dynamic, but for some reason it is not working. It does not expose the Search() method. Here is the code I am using to perform the search;
I have two business objects mapped via LINQ to tables. One of the objects contains an instance of the other object and share a key as an identifier.I want to retrieve Class A and within class A all of Class B's values as well. What I am doing is this:
[Code]....
[Code]....
This seems a little clunky, as in slow. Is there a better way to get the Class B (User) information without making a query every time?
I am currently developing some user controls so that I can use them at several places within a project. One control is a about editing a list of addresses for a customer. Since this needs to be done at several places within the project I want to make it a simple user control. The user control contains a repeater control. By default the repeater displays one address item to be edited. If more addresses need to be added, the user can click on a button to append an additional address to be entered. The user control should work for creating new addresses as well as editing existing ones. The address business entity looks something like this:
public class Address { public string Street { get; set; } public City City { get; set; } public Address(string street, City city) { Check.NotNullOrEmpty(street); Check.NotNull(city); Street = street; City = city; } }
As you can see an address can only be instantiated if there is a street and a city.
Now my idea was that the user control exposes a collection property called Addresses.The getter of this property collects the addresses from the repeater and return it in a collection. The setter would databind the addresses to be edited to the repeater.
Like this:
public partial class AddressEditControl : System.Web.UI.UserControl { public IEnumerable<Address> Addresses { get { IList<Address> addresses = new List<Address>(); // collect items from repeater and create addresses foreach (RepeaterItem item in addressRepeater.Items) { // collect values from repeater item addresses.Add(new Address(street, city)); } return addresses; } set { addressRepeater.DataSource = value; addressRepeater.DataBind(); } } }
First I liked this approach since it is object oriented makes it very easy to reuse the control. But at some place in my project I wanted to use this control so a user could enter some addresses. And I wanted to pre-fill the street input field of each repeater item since I had that data so the user doesn't need to enter it all by his self.
Now the problem is that this user control only accepts addresses in a valid state (since the address object has only one constructor). So I cannot do:
IList<Addresses> addresses = new List<Address>(); addresses.Add(new Address("someStreet", null)); // i dont know the city yet (user has to find it out) addressControl.Addresses = addresses;
So the above is not possible since I would get an error from address because the city is null.
Now my question: How would I create such a control? ;) I was thinking about using an Address DTO instead of a real address, so it can later be mapped to an address. That way I can pass in and out an address collection which addresses don't need to be valid. Or did I misunderstood the way user controls work?
In the following code I want the project Id and name of TList and cast them to List. How do I do that?
List<ListItem> nameItems = new List<ListItem>(); TList<ProductCode> items = GetAllProductCode(); //WANT TO SUBSELECT ID, NAME OF ITEMS IN nameItems nameItems = (from item in items select new (item.Id, item.Name)).Cast<ListItem>();
I mean, what is the faster way to get as fast as I can more than one table with stored procedure? Is there any study what is faster and why? There is a big problem getting more than one table at once with Entities, so the only way is DataSet. But I was told DataSet work very slow. Is that true?
I'm having trouble writing what should be a simple sub-query using LINQ to Entities. I have two tables: Customers and Orders that have a relation on the CustID field. Not all Customers have a record in the Orders table, while some have mutiple records. In traditional SQL, you could write the query like this: SELECT * FROM Orders where CustID IN (SELECT CustID FROM Customers) I know this could be done as a JOIN in both SQL and L2E, but my actual query is more complex (about 8-9 joins), so I am hoping to find a L2E sub-query equivalent. Something like this:
[Code]....
I know LINQ to Entities does not support the " IN " clause, so I am looking for something that will work in its place.
I'm a junior programmer, i do not get the concept of MVC! My method of coding is seperating my application design into 3 layers:
Presentation Layer Business Layer Data Access Layer
I find it very practical to a junior developer or at least to me, so i do not really get the point of MVC since i believe MVC just tries to separate logic from UI. Right?
I decided to have this book to help me have a better idea on code design:
I am new to LINQ but not >net. I do understand SQLDataSource, etc. I was just told by a coworker not to use a LINQ to SQL Class for my new project (Bank.dbml). I was told to use instead the ADO.Net Entity Data Model (bank.edmx).
BankModel.edmxBank.dbml
When only using ADO.Net Entity Data Model I try to associate a GridView with a new LinqDataSource I get no options. When I add a LINQ to SQL Class I get the option to use it but it is empty. Is this because all my LINQ classes are mapped in the ADO.Net Entity Data Model (bank.edmx)? Can someone tell me (or point me to) what the differences are in these two?
I am working on implementing a web application in ASP.Net by following the MVC design pattern (Not ASP.Net MVC). As part of the design, we have entity objects that has only properties as per the corresponding table structure and the idea is using these entity objects in the view layer and the same entity objects are passed to Persistence Layer for saving the data to the database. Business Objects in the business layer are responsible for interacting with the database.
As view creates the entity objects and passes to next layer, what would be the best practice to pass the entity objects to the business layer? Should the business objects accept data objects as parameters and interact with the persistence layer? Is there any other best practice to pass the required objects from the view layer to the next layer? As business objects also need to access the properties of the entity objects passed from the view layer, do we need any "translation" from entity objects to business objects?
the best practices to pass entity objects from view layer to the next layer and also how the entity objects created by the persistence layer can be used by business objects?
Could anyone tell me where is the best place to put my business methods when using EF4 code first POCOs? Should they go in the POCO class? E.g.
public class customer public property Id as int32 public property Name as string public property Archived as boolean public sub MarkAsArchived me.Archived = true end sub public function EmailAllInvoices as boolean ... end function end class
Or should the POCO class be as clean as possible and a seperate class be used for business logic which accepts an instance of a customer POCO in the constructor to work on?
Currently, I have long script which does major processing and then puts data into temp table.
Finally I read data from this temp table to show on the chart, based on user's selection of parameter. So I can divide my query into two parts and while I am researching this,
Is it possible to do processing in one Datasource and read table from second datasource?Is it even possible?
If not, what is recommended method for this (breaking large processing into small one)?
I have placed a textbox, dropdownlist and command button in a section of my master page. The textbox, named txtsearch, will be used to input a search string. The dropdownlist, named ddlsearch, will be used to specify in which field to search in the table, either part name or NSN.
Questions:
What VB code do I use to save the value entered into txtsearch as a search string? How do I pass that value to my entitydatasource? How do I tell entitydatasource to search in either the part name or NSN field based on the value of ddlsearch?
I am working with the web application for a Money Chain business group. I have to calculate the full payout for the associate members of the website twice in a month. The problem is, when i am executing a stored procedure which obviously take a long time to process all the associate details and calculate the payout, before i get the result the timeout happens in the server. What can i do to correct this problem?
How to use Stored Procedures with Linq to Entities? I prefer an example with input and output The videos on asp.net only show how to do this with Linq to SQL.
SELECT * FROM MessageAlerts AS A LEFT OUTER JOIN Contacts AS C ON A.ContactId = C.Id LEFT OUTER JOIN Users AS U ON A.UserId = U.Id INNER JOIN Businesses AS B ON B.Id = C.BusinessId OR B.UserId = U.Id
how to do this : ON B.Id = C.BusinessId OR B.UserId = U.Id with linq in entity framework.
I'm building an ASP.NET MVC site that uses LINQ to SQL. In my search method that has some required and some optional parameters, I want to build a LINQ query while testing for the existence of those optional parameters.
Here's what I'm currently thinking: using(var db = new DBDataContext()) { IQueryable<Listing> query = null; //Handle required parameter query = db.Listings.Where(l => l.Lat >= form.bounds.extent1.latitude && l.Lat <= form.bounds.extent2.latitude); //Handle optional parameter if (numStars != null) query = query.Where(l => l.Stars == (int)numStars); //Other parameters... //Execute query (does this happen here?) var result = query.ToList(); //Process query...
Will this implementation "bundle" the where clauses and then execute the bundled query? If not, how should I implement this feature?