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?
I am currently trialing EF4 code-first. My POCO classes inherit from an Audit class that contains CreatedBy, CreatedOn, UpdatedBy, UpdatedOn. I was hoping the framework would include the Audit properties in my Action table when creating my database, however this doesn't appear to be the case. Does anyone know how to enable this without overriding the OnModelCreating() method?
Public Class Audit Public Property CreatedOn as DateTime End Class Public Class Action inherits Audit Public Property ActionId As Int32 End Class
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?
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?
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 use the ObjectDataSource in an ASP.NET Application.
Using the ASPxGridView. When Updating it goes back to the Data Access Layer and tries to update the Entity, now as I can see while having some properites (Columns, Visible = false) when the entity arrives in the update method the visible = false columns have no values.
I don't want to show all the columns...what if I need 3 of the 30 columns? So I thought I would get the original entity from the context and merge the differences from the updated entity.
i have a table with a field name called 'Firstname' and another field name called 'Lastname'. I would want to have a single column in my GridView which show Fullname and then the firstname and lastname are showed here under an alias. Also, i am binding my GridView using LINQ.So is there a way to create aliaswith LINQ and to use these with GridView ? Would love to have an hint about how i can realize this task.
I just want to know what are the main differences between ADO.NET Entities Framework and LINK to SQL ? It is okay to use ADO.NET EF for a simple website ? What advantages each have?
I have a Consumer class and a BillableConsumer : Consumer class. When trying to do any operation on my "Consumers" set, I get the error message "Object mapping could not be found for Type with identity Models.BillableConsumer.
From the CSDL:
[code]....
Is this because I did not specifically add the BillableConsumer entity to the object set? How do I do that in a POCO scenario?
I am sort of new to Entities Framework however I have successfully built a complete CMS website with the Entities Framework 4.0 in MVC 2.0 following the design patterns and examples laid out in nerddinner and MusicStore.
I am now building another application in ASP.NET webforms however would still like to flex the ORM capabilities of ADO.Net Entity Framework 4.0 however found that it seems like I am always forced to use Entity ObjectDataSource to bind to a GridView etc...
I know I might sound silly to some however I need a few pointers on creating this ASP.NET web application to use Entity Framework and use something like the design pattern of Dependency Injection etc... and still able to bind to GridViews programmatically in code behind.
I like the seperation of using a ntiers design but also would like to have full code control and not be forced to use ObjectDataSources in my aspx page.
I have some questions regarding the entities framework. Once you create your DataModel, if later you modify it such as removing fields adding tables it is possible for the EF to auto detect changes or you have to refresh it manually? If you have to refresh it.. how do you refresh it to reflect new changes? Also do it affect in any way the data in the database?
Due to the way the database was designed, in my model I have a User entity. The Contact entity inherits from the user entity, and the Profile entity inherits from the Contact entity.
How can I get a list of Profiles, and, how do I create a Profile?
let us assume that I have a reusable business layer that further makes use of a data access layer that was implemented using Entity Framework 4.0. The entities returned/consumed by the business layer are self-tracking, allowing us all the goodies that come with those type of entities. I would like to be able to store the entities I work with across post backs (on order to avoid re-querying every time). Basically let us assume I have a paged GridView with 10 items in it, and something like a DetailsView to edit those items. Every time you select a new row on the grid, the details view updates with the information of the selected row. My preference would be to only query for the entities on the initial request of the page and store it in session. Then subsequently I have a list of entities that I can work with and eventually modify and send back to the business layer with all of the changes.
I really want to use session instead of view state to reduce the page payload (self tracking entities are heavy) however I really like view state for this because of the fact that when the user navigates away from the page there is no residual effect. Some of the things that worry me are: When a user navigates away from the page to another page, the entities from the previous page are still in session. I could always do something on load of a page to do housekeeping type of work. Not sure if that's good practice. I am worried about people opening browser tabs and having two views into the same page, it seems like that might pose a problem. Is this even a good approach? Seems like I am trying to have the best of all worlds, it would definitely be much easier to simply re-query on every post back for the entities and pay the 50-100ms hit of the database trip.
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 an ASP.NET application with existing business classes and a database schema. (which I would like to keep) Currently I am using ADO.NET for the DAL, but I would like to switch to some advanced technology there for easier data retrieval.
Is EF applicable to my situation? Can I use it without splitting up my business classes and auto code generation? Can LINQ to SQL solve my problem better?
All I want to do is map my existing classes to the existing tables and dont have to handle details of the data retrieval myself.
I have a Customer object that has two address ID fields (one for HomeAddress and one for WorkAddress)
I am loading the Address Objects by using Include="HomeAddress, WorkAddress" and then binding to the properties using the Navigation Property on the Customer Entity
Can I use just one FormView for doing the Insert/Updates and binding it to an EntityDataSource or would I have to do all the Inserting/Updating manually?
Using a very run-of-the-mill database, with identity int for primary keys, a Dynamic Data Entities Project (EntityFramework) displays the primary key for view and edit. When using Linq to Sql, the primary key fields are not displayed.
I would like to hide the primary keys and use Entity Framework (VS 2008, .Net 3.5 sp1).
I have a few entities I'd like to update at the same time. However I'd like to write individual update methods in each classes partial class file, for each entity and call them all at the same time. For example:
public sub UpdateEntity1() ... end sub
public sub UpdateEntity2() ... end sub
public sub UpdateEntity3() ... end sub
public sub UpdateAll() UpdateEntity1() UpdateEntity2() UpdateEntity3() end sub
My question is how do I manage the object context? do I create one object context in the class I'm calling UpdateAll(), then pass it as a parameter to each individual update method? Or do I create a new context for each Update? I'd like to use the same context because the object are related, and this would decrease the db calls to update all the records.
I am seriously at a loss here. The three things that will not change in this project are the fact that we are using the Entity Framework to do our data access, the fact that we want thorough unit testing and that our UI is asp.net. My question is how the hell do you make this work in Asp.net? E.g. You can use an ObjectDataSource to connect a method to a control, but if this control is a FormView you have all these problems [URL] to deal with and it simply doesn't work.
Furthermore, with grids, you don't get paging or sorting out of the box unless you use an EntityDataSource which basically circumvents your entire application. I can't be the only person who cries at this. What do you do?
DbClick the code behind file of NerdDiner.edmx,It reads "This code was generated from a template." on the top comment lines. I generate my own .edmx file automatically with VS2010, just found that the .designer.cs file didnt contains Objectset,Methods as nerddinner does IDK which template hanselman used to generate this .edmx files,dont tell me he wrote it all by himself! Shoud .edmx and its code behind file be generated automaticlly without hard-coding?
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'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:
Below is some code. The save() method was pre-existing. I added the saveRanking() method. When I walk through the code, it hits the method, but then it just bails out of it. No exception (that I can see). Do I need that function(data) part? Code: function save() { $.post( "/Applications/SaveStatus", [code]....