Skip to main content

ADO.NET

Author @rihemebh

ADO Stands for : ActiveX Data Object

It is a module of .Net Framework which is used to establish connection between application and data sources.

ADO.NET has two main components that are used for accessing and manipulating data are:

Data providerDataSet
It is used to connect to the database, execute commands and retrieve the record.It is a collection of data tables that contain the data. It is used to fetch data without interacting with a Data Source that's why, it also known as disconnected data access method.

Connected Mode​

SqlConnection : It is used to establish a connection to a specific data source

SqlCommand : It is used to execute queries to perform database operations

SqlDataReader: It is used to read data from data source

SqlDataAdapter: It works as a bridge between a DataSet and a data source to retrieve data.It can be used to fill the DataSet and update the data source

Disconnected Mode​

DataSet: It is used to initialize a new instance of the DataSet class

Stored Procedures​

After adding stored procedure in the sql server our SqlCommand becomes:

SqlCommand cmd = new SqlCommand()
{
CommandText = "<stored procedure namme>",
Connection = connection_var,
CommandType = CommandType.StoredProcedure

};

//with parameters :

SqlParameter param = new SqlParameter
{
ParameterName = "@paramname",
SqlDbType = SqlDbType.<type>,
Value = "<VALUE>",
Direction = ParameterDirection.Input (or output)
};

cmd.Parameters.Add(param);

Entity Framework​

Entity Framework (EF) is an open source object-relational mapping (ORM) framework for Ado.NET

framework |EDM (Entity Data Model): It is a set of concepts that describe the structure of data Conceptual model

Mapping

Storage model.

LINQ to Entities: is a query language used to write queries against the object model. It returns entities, which are defined in the conceptual model.

Entity SQL: is another query language just like LINQ to Entities.

Workflow​

ModelFirstDatabaseFirstCodeFirst
Working on a visual diagram using the EF Designer and letting the Entity Framework create/update the rest accordinglybuilding the Database and letting Entity Framework create/update the rest accordinglywriting the Data Model entity classes and let Entity Framework generate the Database accordingly

Code First​

1- Create Models​
  • DataAnnotions : [annotions details]
KeyColumn("Name", TypeName="ntext")ForignKey("fkname")NotMapped
Specifies the primary key of the tableSpecifies the column name and typeForeign kety namewill not be mapped in the db
  • Relations :
1. One To One​
class c1 {
public int id {get; set;}
public virtual c2 c {get; set;}
}
class c2 {
[Key, ForeignKey("c1")]
public int id {get; set;}
public virtual c1 c {get; set;}
}
2. One To Many​
class c1 {
public int id {get; set;}
public virtual ICollection<c2> cs {get; set;}
}
class c2 {

public int id {get; set;}
public virtual c1 c {get; set;}
}
3. Many To Many​
class c1 {
public int id {get; set;}
public virtual ICollection<c2> cs {get; set;}
}
class c2 {

public int id {get; set;}
public virtual ICollection<c1> c {get; set;}
}
2. Create a DBcontext for your database​

you should first create a database in the sql server than add the connectionString to your dbcontext class

dbcontext calss​

It is the primary class that is responsible for interacting with data as object. It often referred to as context. It is a wrapper around ObjectContext which is useful in all the development models: Code First, Model First and Database First.

  • Role:
    • Querying : converts database values into entity objects and vice versa.
    • Change Tracking : It keeps track of changes occurred in the entities after it has been querying from the database.
    • Persisting Data : It also performs the Insert, update and delete operations to the database, based on the entity states.

####### Example

public class ForumContext : DbContext
{ public DbSet<Category> Categories { get; set; }
public DbSet<Post> Posts { get; set; }
public DbSet<PostAnswer> PostAnswer { get; set; }
public DbSet<Tag> Tags { get; set; }
}

####### Methods Of DBContext

EntryEntry\<TEntity>Set(Type)Set\<TEntity>()SaveChanges()

####### Methods Of DBSet

AddAttach(Entity)CreateFind(int)IncludeRemoveSqlQuery
3- Migrations​
Database Initilisations​

Entity framework Code First had different database initialization strategies prior to EF 4.3 like:

  • CreateDatabaseIfNotExists
  • DropCreateDatabaseIfModelChanges
  • DropCreateDatabaseAlways
Automated Migrations​

In your package manager tap those cmd:

  • enable-migrations
  • add-migration "migration_name" : this will create a migration for you that has 2 methods
    • up() contains all the sql queries of the changes that you made
    • down() : contains the opposite of the up() method
  • update-database :This helps you add all the updates to your server

EDM​

  • EDM Structure :
    • EntityContainer : EntityContainer EntityContainer is a wrapper for EntitySets and AssociationSets . It is an entry point for querying the model.
    • EntitySet : Container for EntityType (like the db table)
    • EntityType : datatype in the model
    • AssociationSet : Defines the relation between each entityset
Quering with EDM​
  • LinQ to Entity

    • LinQ Method
    //Student is a model
    using( var context = new SchoolDBStudents() ) {

    var query = context.Students.Where(s=>s.StudentName == "Bill").FirstOrDefault<Student>();
    }

- LinQ Query

```csharp

using( var context = new SchoolDBStudents() ) {

var query = from st in context.Students
where st.StudentName = "Bill"
select st;
var student = query.FirstOrDefault<Student>();
}

-Projection

First/FirstOrDefaultSingle/SingleOrDefaultToListGroupByOrderBy

|Returns the first row from the query result

The difference = First() will throw an exception and FirstOrDefault () returns default value (null) if there is no result data|when we are sure that the result would contain only one element

Single or SingleOrDefault will throw anexception, if the result contains more than one element.|Converts the result to a list|Groups the result by a creteria|Sort the result by a criteria|

  • Entity SQL : It returns ObjectQuery instead of Iqueryable
//You need ObjectContext to create a query using Entity SQL.
string command = " select VALUE st from SchoolDBEntities.Students " +
"AS st WHERE st.StudentName == 'Bill'";

var obj = (ctx as IObjectContextAdapter).ObjectContext;

ObjectQuery<Student> student = obj.CreateQuery<Student>(command);
}
  • Native SQL

using( var ctx = new SchoolDBEntities() ) {

var student = ctx.Students.SqlQuery("Select * from Students where StudentId=@id", new SqlParameter('@id',1)).FirstOrDefault();
}


Operations​

Using DBContext​
1. Insert​
// create new Standard entity object
var newStandard = new Standard();
// Assign standard name
newStandard.StandardName = "Standard1 ";
//create DBContext object
using (var dbCtx = new SchoolDBEntities())
{
//Add standard object into Standard DBset
dbCtx.Standards.Add(newStandard);
// call SaveChanges method to save standard into database
dbCtx.SaveChanges();
}
2. Update​
Student stud ;
// Get student from DB
using (var ctx = new SchoolDBEntities())
{ stud = ctx.Students.Where(s => s.StudentName == "New
Student1").FirstOrDefault<Student>();
}
// change student name in disconnected mode (out of DBContext scope)
if (stud != null) { stud.StudentName = "Updated Student1"; }
//save modified entity using new DBContext
using (var dbCtx = new SchoolDBEntities())
{
//Mark entity as modified
dbCtx.Entry(stud).State = System.Data.EntityState.Modified;
dbCtx.SaveChanges();
}
3. Delete​
using (var context = new SchoolDBEntities())
{
context.Entry(disconnectedTeacher).State =
System.Data.EntityState.Deleted;
context.SaveChanges();
}