Entity Framework 5 - How to generate POCO classes from existing database - entity-framework

I am using VS 2012 and EF 5. I have an existing database that I want to create POCO classes from the existing database. I followed the steps to add an ADO.NET Entity Data Model to my project. I went through the wizard to use an existing database. It then created the edmx and tt files with the designer open. However, I want to create the POCO objects and use them. The Microsoft site states that the POCO Entity Framework Generator is obsolete and I should use the DBContext Generator. I can't figure out steps I use to generate the POCO classes. I only see the edmx designer. I really don't even want an edmx file but instead just POCO classes. How can I get POCO classes to be created from an existing database using EF 5 and VS 2012?

Use EF 5.x DbContext Fluent Generator
You can add it from online templates:
Generate edmx from existing database
Select Add New Item
Search online templates for POCO
Add EF 5.x DbContext Fluent Generator
It will add three T4 templates to your project:
XXX.Context.tt - context inherited from DbContext
XXX.Entities.tt - POCO entities
XXX.Mappings.tt - fluent mappings for each entity
BUT you need to setup path to your edmx data model manually. Each of these templates have line string inputFile = #"$edmxInputFile$";. You need to provide name of your edmx file here:
string inputFile = #"Northwind.edmx";

The process to do this is pretty streamlined now, it seems. The steps from the accepted answer are now easy to do from the EDMX designer itself. Basically,
Generate the model (edmx) from an existing database by adding ADO.NET Entity Data Model to the project (see here for more details),
and then
Open the .edmx file in the Entity Designer.
Right-click an empty area on the Entity Designer surface and point to Add Code Generation Item.
In the Add New Item dialog, select Online Templates and type DBContext in the Search Online Templates text box.
Select the appropriate version for your template (5.0, if you want to target the Entity Framework 5.0).
Click OK.
This will do all the work, apparently. The quoted instructions here refer to Online Templates as installing EF 5.x DbContext Fluent Generator is required. If you have it already installed, there is no need to search for it in the Online Templates but in the Installed Templates.
For more info you can check this page, section "To use the DbContext Generator Template to Generate Object Layer Code".

Related

EF Context missing a collection

I'm trying to generate an entity from my SQL database using the ADO.NET Entity Data Model using the ADO.NET DbContext Generator. When I generate my edmx from the database I can see it in the model. I right click on my tt file (which is in a separate project) and run the custom tool. The entity appears. It's called CustomerContact. However, my dbcontext does not have a CustomerContacts collection. What is going on here?
I figured it out. The problem was the different versions of Entity Framework. I updated both projects to the latest version of EF and it works now

Get DbContext for Entities

Okay, I feel a bit foolish for having to ask this but I guess my understanding of the inner workings of Entity Framework is lacking.
I'd like to experiment with work with DbContext. I have an existing ASP.NET MVC application using EF 4.2. I can get my entities using:
var context = new MyEntities();
And this works just fine.
But how the heck to I get the same data represented by a DbContext?
So I guess you are using default code generator provided by EDMX designer - it will use ObjectContext and heavy weight EntityObject based entities.
If you want to use DbContext you must:
Turn off that default code generation - in property window remove Custom Tool for EDMX file
Download and install DbContext T4 generator (you can get it directly from extension manager in Visual Studio)
In EF designer select Add Code Generation Item from context menu in the designer surface (not on entity)
Now EF will add two .tt files to your project - one will be responsible for creating a new class for every entity or complex type defined in your EDMX file and the second will be responsible for creating class derived from DbContext and exposing sets for all your entity types

Entity framework by hand without designer

Maybe my google fu is sucking but I can't find any tutorial on how to use Entity framework without using the designer in Visual Studio. Is there a way to use Entity framework without the designer?
You can either use code first approach (it requires EFv4.1 or newer) where the mapping is defined in code (or by default mapping conventions) or you can create EDMX file from scratch - it is XML file.
They are two ways:
Classical (database first): You can learn about xml EF files on msdn .edmx File Overview (Entity Framework)
An .edmx file is an XML file that defines a conceptual model, a
storage model, and the mapping between these models. An .edmx file
also contains information that is used by the ADO.NET Entity Data
Model Designer (Entity Designer) to render a model graphically.
New (code first): They are a lot of resources. Here a MS code first video.

Which type of Entity generator to use?

I am writing my first WPF and EF application. I am using SQL CE database and I have added few tables to the DB. The EF diagram is generated and now I want to generate the classes. I am new to EF and MVVM both.
When I right-click on a Table diagram, it gives option "Add Code Generation Item..". On selecting it, there are two options:
Add Entity Object Generator
Add Self-Tracking Entity Object Generator
I want to know what is the difference between the two. Which one should I use? I also want to know which one is latest and what is POCO?
A POCO is a Plain Old CLR Object... a simple class that has only properties.
http://en.wikipedia.org/wiki/Plain_Old_CLR_Object
There are 3 approaches that the Entity Framework delivers.
Model first (you create a model in visual studio and generate the database)
Database first (thats what you do, you generate a model from a existing database)
Code first (the newest one, you just write you POCOS and the entity framework generates the database)
I think it is enough to generate the diagram from database. The context and models should be available after this.
Neither of those is the POCO generator. The best way to get that is to install Entity Framework 4.1. You'll then see some new options in the list to add a code generation item.
I'm a pretty big fan of the DbContext/POCO generator added in 4.1 as the code it creates is VERY easy to work with compared to the older stuff, and it works well in a DB First setup like you're using (which is also what I use).
You can give this code generator a try:
http://salardbcodegenerator.codeplex.com/
It generates data annotations and implements INotifyPropertyChanged for CodeFirst approach.

Making Entity Framework 4.0 create POCOs

When I create Entities within the Graphical view of the edmx file. All my entity classes are bundled together in the Designer file. Is there a way to make Entity Framework to create classes in separate files allowing me to have more control over my entity classes?
If you are using Visual Studio 2010, click on the design surface of the EDM Designer and select Add Code Generation Item, then select ADO.NET POCO Entity Generator. This will create a T4 Template file (*.tt) that will be used to generate your POCO classes. Every class will have it's own file.
You have to be aware of the fact that every time you make changes to your EDM and save, those classes will be re-generated and the files will be re-written, so it's better not to make any changes to them directly. Those classes are partial, so you can create new files and build up your classes without changing the initial files.