I'm curious as to what people consider better practice, between duplicating model structure in the view model and using a mapping tool to move data between the two, or aggregate the model inside the view model, i.e. have a property on the view model class that is a reference to the actual model. Which is considered a better approach in general?
getting data from multiple Entities models into an MVC controller. Most of the examples I have seen for using EF in an MVC2 app only use a single entitiy.
I have just started using MVC2 in C# using the Entity Framework models (CIOps.model) created from an SQL database. I can create the controller and views using single tables of the model in MVC2, but I just cannot get my head around how to get data from multiple entity tables into the controller (similar to joins in T-SQL). I have included an example below of the controller code that works with a single entity table, tbl_tours (tbl_tour in DB).
Could someone please illustrate how this code would be changed to include additional columns from FK tables in addition to tbl_tours columns. E.g. the clients name from the tbl_clients, the coordinators name from the tbl_employees, and costs from tbl_costs entities? Is it possible to do this directly using the EF model entities/classes that are already created and not use LINQ, POCO, Repositories, etc.? The FK relationships are already in the EF models. I have included the whole controller code, but I just need a few examples of how to join the multiple entities, not rewrite every CRUD function function in the controller. I think this will get me over the hump in using EF in an MVC2 App. Also ignore the fact I am using the home controller, this will change in the application.
Suppose that you have a big Data Entry Web Application Like Microsoft CRM, what is the strategies and technologies that you follow to build a website like it?
I don't want to use any Dynamic Web Page Generation software, because it have a lot of limitations.. Also I don't want to design every page and repeat everything
I can't to understand clearly how to create strong and quickly application using EF. For example, I have class ForumPost (table ForumPost) for select one of record I write method like:
public ForumPost ForumPost(int ForumPostID) { return (from i in _dataContext.ForumPostSet where i.ForumPostID == ForumPostID select i).First(); }
all works. But on page (I use ASP.NET MVC) I should display info from another linked tables, ForumName (each post have ForumID) etc. So, I modify this method to:
public ForumPost ForumPost(int ForumPostID) { return (from i in _dataContext.ForumPostSet .Include("ChildPosts").Include("ParentPost").Include("Users").Include("Forums").Include("Tags").Include("ForumPostPolls") where i.ForumPostID == ForumPostID select i).First(); }
ok, all works. Then I want to make some actions in model with ForumPost, i.e.
public void RootPost(int PostID, ref Models.ForumPost Root) { ForumPost post = ForumPost(PostID); if (post.RootPost != null) { Root = ForumPost(post.RootPost.ForumPostID); } else Root = post; }
it works too. But problem is in speed. I not need in RootPost all those includes. So, I should to create one more method like:
private ForumPost ForumPostIncludes1(int ForumPostID) { return (from i in _dataContext.ForumPostSet .Include("ChildPosts") where i.ForumPostID == ForumPostID select i).First(); }
then ForumPostIncludes2, ForumPostIncludes3 etc... second way - redesign RootPost with LINQ expr, not with call another method. But in this way difficulties to change DB. third way? How to do it correctly?
This is just a glimpse at the object model, but it's focused on the complexity of the relationships and lists. What I can't really get is what's the best way to factor my repository interfaces, given the requirements to do a unit of work. For example, to create a game, you'll need a venuedate and two participants. Does that mean the GamesController should require an IGameRepository, an IVenueDateRepository, and an IParticipant repository? Should they be rolled into one repository?
Also, what about in the consumption cases? For example, to display a signle team's schedule, you'll need all of the Participants for that Team, all of the Games for that participant, and all of the GameSegments for the participant. If those are factored into individual repositories I can't see how you can do efficient queries. Does that mean you have Repositories specifically focused on different cases? for example:
public interface IScheduleRepository { public ICollection<Game> GetScheduleForTeam(Team team); // More consumption methods } public class ScheduleRepositry : IScheduleRepository { public ScheduleRepository (ModelContext context) { // Do stuff with context } public ICollection<Game> GetScheduleForTeam(Team team) { return ( from p in context.Participants where ((p.Game.VenueDate != null) && (p.TeamId == team.Id)) orderby p.Game.VenueDate.StartTime select p.Game).ToList(); } // more consumption methods } public interface IGameRepository { public void AddGame(Game game); // More crud methods } // Not showing games repository public class GamesController : Controller { public GamesController (IGameRepository gamesRepo, IVenueDateRepository venueDateRepo, IParticipantRepository participantRepo) { // do stuff with repos here } [HttpPost] public ActionResult AddGame(Game game) { // Skipping validation logic // this? VenueDate = venueDateRepo.Add(game.VenueDate); foreach (Participant p in Game.Participants) { participantRepo.Add(p); } Game = gamesRepo.AddGame(game); // or this? // how would the game repo know to persist // the children elements? is that tight coupling? Game = gamesRepo.AddGame(game); } // more consumption methods }
My question is I don't yet understand to what degree factoring your repositories make sense based on a connected object model. I'd love to get some advice here.
I make use of validation with data annotations in my model classes. How do I make sure this annotations are not violated when I validate data in my business layer, before sending it to the DAL? I guess I don't want to define the validation rules in two places (model classes and in my BLL-classes)?
I am using a model but as I want to have clean views I use the viewmodel approach which is like a downsized model which I map in my controller actions before sending to the view or getting it back in a HttpPost attributed action.
My question is: where to put the data annotation attributes. On the viewmodel classes or on the model? If I get it clearly the viewmodel annotations are used for the client side generation of validation right?
Do does that mean I have to put data annotations everywhere on both model and viewmodel?
I am using the ADO.NET Entity Framework for loading data from the database. The classes are directly mapped to database tables in the database. The problem is that these classes are not optimal for binding to the UI elements. As a result of this I have some custom entities which are populated at the service layer and returned. It is these custom entities (classes) to which I bind the UI elements. My questions on this are1. Is populating these entities at the service layer the most appropriate way to do this. I personally do not think so because if we introduce some additional UI elements which need different entities then I have to modify the service layer again.2. What is the best approach/pattern to get this done.
I am a newbie in mvc3 and i'm wondering how to use attribute like [Display(Name="")] for model that comes from an entity data model that I provide im my "Model" folder in my mvc3 project.
I didn't provide a .cs class for each of my database tables .
other words, I want the controller class render a edit form for me like :
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 program in ASP.NET for a while now. My applications uses always the DataSet. Some told me that Entity Data Model is the DataSet for LINQ. Now I want to try to working with it I have some questions but can't find the answers. I hope someone can. When I build an application I use the 3-tier structure. So Presentation-layer, Business-layer and the Data-layer. Normally I had some classes in the Data layer with specific methods to interact with the DataSet. When I read the table or something I create an object for the business layer.
With the Entity Data Model it seems a little bit confusing. If I read a table (for example Company) the edmx has created an class already. So is the edmx a replacement for the Data-layer and also for the Business layer? Is the edmx also a good use for multi-user application or is a connected application better?
For VS 2010, I am trying to add new item of existing mdf file. By : Add new item -> Data -> ADO.NET Entity Data Model -> Generate from database.
When I reach the step of "Choose Your Data Connection", under the : "Which data connection should your application use to connect to database?" The combo-box is empty. How can I make that combo-box not be empty (some configurations?)
Is there a way to export a EF 4.0 Data Model to EF 3.5?
I looked around and found that we are not able to access EF 4.0 from a ASP.Net 3.5 project here: [URL]
Our project is the 1st to go to .Net 4.0 using Entity Framework and we (the team) were wondering if there was a way for the other projects that "might" need to access our data that are still using the .Net 3.5 framework.
I have followed this tutorial [URL] to get a google map displayed but now I want do the next step and read the long/lat and text out of my ADO.NET Entity Data Model and put it on the map (preferably the text should appear when clicking on the red spot in a white text box - as you know it from google). Has someone done this already and could let me know how I get the points on the google map? THis is how the function in my controller looks right now:
Function Map() As ActionResult ViewData.Model = (From m In _db.ahn_mappoints Select m.LONG, m.LAT, BLOG = m.Text.Substring(0, 81) & "...").Take(2).ToList() Return View() End Function
We're upgrading our system core asp to asp.net mvc, but there is a problem with refreshing the Database Model, our system is a UDP listener Windows Service, and Instering data to our database, our web system reading the database and process it then render. Here is the problem, When i enter some data using DatabaseModel, there is no problem, but when Windows service insert records to database, i can see the record at the web, is there a way to refresh entity data model/
How can I share the auto-generated entity data model (generated object classes) amongst all layers of my C# web app whilst only granting query access in the data layer? This uses the typical 3 layer approach: data, business, presentation.
My data layer returns an IEnumerable<T> to my business layer, but I cannot return type T to the presentation layer because I do not want the presentation layer to know of the existence of the data layer - which is where the entity framework auto-generated my classes.
It was recommended to have a seperate layer with just the data model, but I'm unsure how to seperate the data model from the query functionality the entity framework provides.