jump to navigation

Introduction to Entity Framework Core April 1, 2017

Posted by fofo in Entity framework.
Tags: , ,
add a comment

In this post I am going to look into Entity Framework Core, present the new features, the similarities and differences from EF6.

Ι hope that the people who will read this post are familiar with what EF is. In a nutshell EF is the official data access technology platform from Microsoft. It is a  mature platform since it is almost 9 years old. It is a new way of accessing and storing data, a set of .NET APIs for accessing data from any data store.

Going into more details Entity Framework fits into a category of data access technologies called Object Relational Mappers or ORMs.

ORMs reduce the friction between how data is structured in a relational database and how you define your classes. Without an ORM, we typically have to write a lot of code to transform database results into instances of the classes. An ORM allows us to express our queries using our classes, and then the ORM builds and executes the relevant SQL for us, as well as materializing objects from the data that came back from the database. Βy using an ORM we can really eliminate redundant data interaction tasks and we can really enhance developer productivity. Instead of writing the relevant SQL to target whatever relational database you’re working with, Entity Framework uses the LINQ syntax that’s part of the .NET framework. LINQ to Entities allows developers to use strongly-typed query language regardless of which database they’re targeting.

When we use EF Core in your application, firstly you need to create your domain classes. These are pure .Net classes or objects and have nothing to do with EF Core.Then you use Entity Framework Core APIs to define a data model based on those domain classes. You also use Entity Framework APIs to write and execute LINQ to Entities Queries against those classes. When you need to save data back to the database you use SaveChanges methods. EF Core keeps track of the state of objects that it’s aware of, it’ll determine the SQL it needs to save data back to the database. Entity Framework will transform your LINQ to Entities Queries into SQL, execute that SQL, and then create objects from query results.

As you many know, Entity Framework development was moved to CodePlex and became open source.  Entity Framework 6 has since then been moved to GitHub. The URL is github.com/aspnet/EntityFramework.

You can download and experiment with the latest version, you can clone the repository, add your own fixes/features, and then submit those as pull requests to become part of Entity Framework Core. All pull requests that are submitted from the community are examined from the ADO.Net team before becoming part of EF Core.

Another thing I wanted to mention is that different people call EF with different names. Let me be clear on that so that there is no confusion.

EF Core was released in late June of 2016 and it was called Entity Framework 7, but in January 2016, its name was changed to Entity Framework Core. At the same time ASP.NET 5 was changed to ASP.NET Core.

EF Core is not simply an update from EF6, it’s a different kind of Entity Framework, it is a complete rewrite.

For developers who have invested time and effort on EF6 and have projects on EF6 should not worry as it will be actively supported.

Entity Framework Core can run  on .NET Core. NET Core  can run on the CoreCLR and CoreCLR can run natively, not only in Windows, but also on Mac and Linux.

EF Core can also run inside the full .NET Framework that is any version that is 4.5.1 or newer.

Entity Framework Core is a brand new set of APIs and it doesn’t have all of the features that you might be used to with Entity Framework so it’s important to understand that before starting a  new project with Entity Framework Core.

If you want to target cross platform or UWP apps then you have no other way but to use Entity Framework Core. For .NET apps that you want to run on Windows, you can still use Entity Framework 6. If you are building an ASP.NET Core applications that will run on Windows you can still use Entity Framework 6, so bear that in mind as well.

There are Entity Framework features that will never be part of the Entity Framework Core, for example in EF Core there is no support for a designer-based model, there’s no EDMX and it isn’t supported by the Entity Framework Designer.

Having said that in EF Core you can can still define a data model with classes and a DbContext. The DbContext API is still there and so is DbSets.

You can also create and migrate to the database as your model changes, and you can still query with LINQ to Entities. Entity Framework continues to track changes to entities in memory.

There are some new features in  EF Core that there were no available in earlier versions. In EF Core we have the ability to do batch inserts, updates, and deletes.

We can specify unique foreign keys in entities and LINQ queries have become smarter and more efficient.

In EF Core there is an In Memory provider that makes it really easy to build automated tests using Entity Framework without hitting the database.

EF Core makes it really easy to use with inversion of control patterns and dependency injection. EF Core has the ability to populate backing fields not just properties. EF Core supports mapping to IEnumerables.

Hope you have a better understanding of EF Core now.

Hope it helps!!!

 

Create a master details application with WPF and the Entity framework November 26, 2010

Posted by fofo in general .net, Visual Studio 2010, WPF.
Tags: ,
2 comments

I have been studying WPF for some time now and I am impressed with its extensive API and the incredible-stunning applications that one can build.

In this post I would like to show you how to create a WPF application that will fetch data from a database. Then I will enhance the simple application by creating a master details form. I will demonstrate all these with a hands on, step by step example. I will do all that without writing a single line of code.

My favourite data access technology is Entity framework and I am going to use EF to fetch data from the database.

I am going to use the Pubs database. You can download the installation scripts of the Pubs database from here.

I am going to use Visual Studio 2010 and C# as the development language. So here it is.

  1. Fire up Visual Studio 2010. Create a new project and choose “Wpf Application” from the available templates. Save your project with a name that you want in the desired location.
  2. Add new item in your WPF project. From the available items choose “Ado.Net Entity Data Model” name your model pubs.edmx and click Add. In the Entity Data Model wizard click generate from database and click Next. Create a new connection and choose the SQL Server instance that the Pubs database is attached to. Then click OK to close the  Connections window and return to the Entity Data model wizard window. Click Next and choose from the “Choose your Database Objects” window all the tables. Then click Finish.
  3. Go to Data->Show Data Sources option and click Show Data Sources option. You will see immediately all the classes availablee to use in my application. That is awesome. Drag and drop the Publishers class on the MainWindow.xaml file.

Now let’s go and have a look at the XAML code generated. We notice that we have a DataGrid control.Some of the xaml code generated is show in the snippet below.

<Window.Resources>         <CollectionViewSource x:Key=”publishersViewSource” d:DesignSource=”{d:DesignInstance my:publisher, CreateList=True}” />     </Window.Resources>     <Grid DataContext=”{StaticResource publishersViewSource}”>         <DataGrid AutoGenerateColumns=”False” EnableRowVirtualization=”True” Height=”125″ HorizontalAlignment=”Left” ItemsSource=”{Binding}” Margin=”12,12,0,0″ Name=”publishersDataGrid” RowDetailsVisibilityMode=”VisibleWhenSelected” VerticalAlignment=”Top” Width=”479″>             <DataGrid.Columns>                 <DataGridTextColumn x:Name=”pub_idColumn” Binding=”{Binding Path=pub_id}” Header=”pub id” Width=”SizeToHeader” />                 <DataGridTextColumn x:Name=”pub_nameColumn” Binding=”{Binding Path=pub_name}” Header=”pub name” Width=”SizeToHeader” />                 <DataGridTextColumn x:Name=”cityColumn” Binding=”{Binding Path=city}” Header=”city” Width=”SizeToHeader” />                 <DataGridTextColumn x:Name=”stateColumn” Binding=”{Binding Path=state}” Header=”state” Width=”SizeToHeader” />                 <DataGridTextColumn x:Name=”countryColumn” Binding=”{Binding Path=country}” Header=”country” Width=”SizeToHeader” />             </DataGrid.Columns>         </DataGrid>     </Grid>

We notice the CollectionViewSource which is our binding source to the underlying data.Let’s see some of the code that it is generated from Visual Studio for us in the code behind file.

 private void Window_Loaded(object sender, RoutedEventArgs e)
 {

WpfMasterDetailEF.pubsEntities pubsEntities = new WpfMasterDetailEF.pubsEntities();
 // Load data into publishers. You can modify this code as needed.
System.Windows.Data.CollectionViewSource publishersViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("publishersViewSource")));
System.Data.Objects.ObjectQuery<WpfMasterDetailEF.publisher> publishersQuery = this.GetpublishersQuery(pubsEntities);
publishersViewSource.Source = publishersQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
 }

4) Run your application and you will see the data in your application.That is pretty cool and I did not have to write a single line of code.

5) Now we will enhance this application by creating a master details application. From the Data->Show Data Sources drag and drop the employees entity to the MainWindow.xaml.

Have a look at the picture below.

6) Have a look at the generated code.

Note the second CollectionViewSource which is our binding source to the undelying data.

 <CollectionViewSource x:Key="publishersemployeesViewSource" Source="{Binding Path=employees, Source={StaticResource publishersViewSource}}" />

7) Run your application and see that we have a master/detail functionality out of the box. That is pretty cool.

Hope it helps.

ASP.NET 4.0 Entity DataSource and GridView September 27, 2009

Posted by fofo in ASP.NET 4.0, c# 4.0, Visual Studio 2010.
Tags: , , , ,
3 comments

Recently I had the time to examine thoroughly my blog stats. From that it was evident people liked a lot the posts regarding the new features in .Net 4.0. So in this post I am going to discuss the new Entity DataSource web server control which is  similar to the LINQ to SQL DataSource, except it allows you to use your Entity Framework data object model instead. I will also demonstrates the new features of the GridView control. I have talked about EF and how to build an application with EF and C# in one of my previous posts. In this post I will talk more about the Entity Datasource object and enhancements made in the GridView control.

I will create a sample website as always so it is easier for you to understand.In order to follow along you must have installed in your PC VS 2010 and the .NET 4.0 framework.Obviously we are going to need a data store for our application. I will use the AdventureWorksLt which you can download from this site .

1) Launch Visual Studio 2010 and create a new web site.

2) Choose Asp.Net application from the available templates and C# as the development language

3) You now have your files in the Solution Explorer window.

4) Choose the default.aspx page and go to your Toolbox and under the Data Controls drag and drop an Entity Datasource control on the page.

5) Now you need an Entity Data model that the Entity Datasource can bind to. In the Solution Explorer add (right-click) a new special folder , App_Code

6) Select the App_Code and add a new item(right-click) , ADO.NET Entity Data Model.Leave the default name.

7) In the next window select “Generate from database” and click Necxt.

8) In the next window of the Entity model wizard create a new connection to you database (AdventureWorksLT)or select an existing connection that points to the same db.

9) Save the entity connection settings in the web.config file

10) Click Next on the wizard window. From all the available db objects we want to include in our model only tables and more specifically only the Products table.

11) Select the table and click Finish. So now we have a Product Entity with all the mappings to the database.

12) Select the Entity Datasource control and click the arrow on the right-top corner and select Configure Data Source.

13) Select in the Named Connection option of the wizard and select the AdventureWorkLTEntities and click Next

14) In the EntitySetName select Product and from the available Entity values select ProductID,Name,ListPrice,Size,Weightand and click Finish.

15) Drag and drop on the default.aspx page a Gridview control (control in your Toolbox data controls area).Give it some formatting from the AutoFormat options

16) Set the datasource of the Gridview control to the Entity datasource.

17) Enable Sorting,Paging and Selection for the Gridview control

18) Run your application by hitting F5 from your keyboard. If everything is ok you will be able to see a list of products in your page.

The imporevement in the GridView control is about selecting rows.If you selected an item in GridView(the third one for example) and then browsed through the pages the third item in every page will also be selected. That was not always what we wanted. The GridView control did that based on an index it had and used to find the third item on that page.

We can overcome that by enabling the EnablePersistenSelection property and setting it to True.

Then we need to select the DataKeynames property and set it to ProductID.

19) Now if run our application again and select a product in the first page(6th product), and browse through the pages the product in position 6(index 6) is not selected anymore.Now the selection is made over the underlying primary key and not the index in the view of the GridViewControl

Hope it helps!!!

If you need the source code just email me or just comment on this post.

Add to FacebookAdd to NewsvineAdd to DiggAdd to Del.icio.usAdd to StumbleuponAdd to RedditAdd to BlinklistAdd to TwitterAdd to TechnoratiAdd to Furl

Building an ASP.Net application with C# and Entity Framework June 27, 2009

Posted by fofo in asp.net, c# 3.0, Sql Server, Visual Studio 2008.
Tags:
11 comments

In this post I will show you a step by step example on how to build an ASP.NET application with C# and Entity Framework. First let’s try to define what EF is and why it is going to help us to create easily data-centric applications.Entity Framework is an object-relational mapping (ORM) framework for the .NET Framework.EF addresses the problem of Object-relational impedance mismatch. I will not be talking about that mismatch because it is well documented in many sites on the Internet. Through that framework we can program against a conceptual application model instead of programming directly against a relational schema-model. By doing so we can decrease the amount of code we do write to access a data storage and thus decrease maintenance time.

ADO.NET Entity Framework (EF) is included with .NET Framework 3.5 Service Pack 1 and Visual Studio 2008 Service Pack 1

So you must donwload and have this software installed if you want to follow along.

It is not going to be a very difficult example. I will just bring data from a entity model to a gridview control and then give the user a way to filter that data.

There are many new enhancements regarding EF in VS 2010 and .Net .4.0 framework. I will not be talking about that since these enhancements are brand new and I am currently looking into them. I will just mention model-first development. This feature allows you to create your entity data model from scratch and then generate a database from it!!! We will do the opposite in this example.

Obviously for this example we will need a database. I will use the Pubs database. This is a well known database and many people are familiar with its schema.You can download the Pubs database from this link. If you need some help on how to install the database have a look here .

I have installed SQL Server 2008 Standard edition in my PC. SQL Server 2008/2005 Express editions will work just fine.You can download SQL Server 2008 Express edition from this link. I have attached the Pubs database in my local instance of the SQL Server.

Let’s start out project.

1) Launch Visual studio 2008

2) Create a new Project and from the available templates choose “ASP.Net web application”

3) Choose C# as your language of development and save your project in your hard drive with a name e.g “EFWebApplication” and click “OK”.

4) Click on the Solutions Explorer and open the Default.aspx page.

5) From the Toolbox drag and drop on the page , a Gridview control, a Textbox control and Button control. Leave the default names.

6) From the Toolbox drag and drop a EntityDatasource control on the page.

7) Choose the data source of the gridview control to be the EntityDatasource1 object.

8) Now we are ready to create our entity model. Right – click on your project from the Solutions Explorer window and Add a new Item. From the availble templates choose ADO.NET Entity data model. Give it the name Pubs.edmx and click the Add button.

9) In the Entity data model wizard window choose Generate from database and click Next .

10) Click New Connection, choose the Server name and from the databases your Pubs database is attached and then connect to the Pubs database and test your connection and click OK

11) If you notice you will see that there is something called Entity connection string and looks like this

metadata=res://*/Pubs.csdl|res://*/Pubs.ssdl|res://*/Pubs.msl;provider=System.Data.SqlClient;provider connection string=”Data Source=FOFO-PC;Initial Catalog=pubs;Integrated Security=True”

The connection string used by the Entity Framework contains not only the database connection string, but a metadata parameter with pointers to three mapping files separated by a pipe character.These mapping files will be generated when we finish this wizard.

12) Click Next on your wizard window and from the databases objects available choose Tables and more specifically the Titles, Authors and TitleAuthor tables. Leave the Model namespace as pubsModel and click Finish.

13) Our new Pubs.edmx file called is created and all the entities are generated which are basically classes derived from the data model . Have a look at the picture below to see the Entity model in the Designer window. You can zoom in and zoom out using the appropriate buttons.

pubsedmx

14) Have a look at the Mapping details of each entity type (Authors, Titles,  TitleAuthor). You can change if you want the property names for a particular entity type. For example you can change au_lname to lastname of the Authors entity type. You can also change the names of the entity types and singularise them in a way so they resemble more like a class name. Change Authors to Author and Titles to Title from the Designer.

15) Go to your default.aspx page and click on the EntityDatasource object and hit the option Configure Data Source. In the window that appears choose Named Connection and select the PubsEntities that will apear in the drop-down and hit the Next button.

pubsef-1

16) In the next step from the EntitySetName select authors. Select all fields and and enable automatic inserts,updates,deletes and hit the Finish button.

pubsef-2

17) In your gridview control enable paging,sorting,editing,deleting and selection.

pubsef-3

18) Build and run your application and see the records in your web page. Try to sort,edit, delete records. Well done!!!!

19) Let’s give the ability to the user to apply a filter to the data by typing something to the textbox and return only the relevant data.Choose your EntityDatasource object and from the Properties window select  Where. Click on the “…” to launch the Expression editor window.

20) We will create an expression to use it as a filter(e.g filter the records by city name). The expression could be something like this

it.city=@city OR @city IS NULL

This expression above is written in Entity SQL which is T-SQL like syntax.

Click the Add Parameter button and under name write “city” and the value will be a control, so from the Parameter Source select Control and from the ControlID your textbox control (e.g TextBox1)

Go to show advanced properties and in the “Type” field choose String.  Your settings should be like this:

pubsef-4jpg

21) Hit the OK button to close the Expression Editor window. Hit F5 to run your application. In the textbox type

“Oakland” and hit the button control. See the filtered results. That is all!!!! We did that without writing a single line of code.

If you need the source code for this example, just leave a comment and I will email it to you as soon as possible.

Hope it helps!!!

Add to FacebookAdd to NewsvineAdd to DiggAdd to Del.icio.usAdd to StumbleuponAdd to RedditAdd to BlinklistAdd to Ma.gnoliaAdd to TechnoratiAdd to Furl