35
loading...
This website collects cookies to deliver better user experience
namespace SchoolEFCore.Domain
{
public class Student
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
//navigation properties
public List<Course> Courses{ get; set; }
}
}
namespace SchoolEFCore.Domain
{
public class Course
{
public Guid Id { get; set; }
public string Name { get; set; }
//navigation properties
public List<Student> Students{ get; set; }
}
}
namespace SchoolEFCore.Domain
{
public class CourseStudent
{
public Guid StudentId { get; set; }
public Guid CourseId { get; set; }
//navigation properties
public Student Student { get; set; }
public Course Course { get; set; }
}
}
namespace SchoolEFCore.Data
{
public class SchoolContext : DbContext
{
public static readonly ILoggerFactory loggerFactory = LoggerFactory.Create(
builder =>
{
builder.AddConsole();
}
);
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public DbSet<CourseStudent> CourseStudents { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseLoggerFactory(loggerFactory)
.EnableSensitiveDataLogging()
.UseSqlServer("Data Source = (localdb)\\MSSQLLocalDB; Initial Catalog = SchoolDB");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//tells the model builder that the entity CourseStudent has a key that consists of
//both the StudentId and the CourseId, they keys are also foreign keys that point to the the actual entries in either table
//this is the final step needed to create a many to many
modelBuilder.Entity<CourseStudent>().HasKey(s => new { s.StudentId, s.CourseId });
}
}
}
public static void AddNewStudent()
{
using (var context = new SchoolContext())
{
var student = new Student()
{
FirstName = "Christian",
LastName = "Augustyn",
DateOfBirth = new DateTime(1999, 1, 10)
};
context.Students.Add(student);
context.SaveChanges();
}
}
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (21ms) [Parameters=[@p0='cc438b71-93ab-4a09-0bd0-08d93a59630c', @p1='1999-01-10T00:00:00.0000000', @p2='Christian' (Size = 4000), @p3='Augustyn' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
INSERT INTO [Students] ([Id], [DateOfBirth], [FirstName], [LastName])
VALUES (@p0, @p1, @p2, @p3);
public static void AddCourseWithStudent()
{
using (var context = new SchoolContext())
{
var course = new Course()
{
Name = "Math",
Students = new List<Student>
{
new Student()
{
FirstName = "John",
LastName = "Doe",
DateOfBirth = new DateTime(1989, 2, 12)
}
}
};
context.Courses.Add(course);
context.SaveChanges();
}
}
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (22ms) [Parameters=[@p0='12468e33-6872-4d4d-59b2-08d93a5bb4d5', @p1='Math' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
INSERT INTO [Courses] ([Id], [Name])
VALUES (@p0, @p1);
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (1ms) [Parameters=[@p0='72e51fec-e51a-4ed0-709b-08d93a5bb4de', @p1='1989-02-12T00:00:00.0000000', @p2='John' (Size = 4000), @p3='Doe' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
INSERT INTO [Students] ([Id], [DateOfBirth], [FirstName], [LastName])
VALUES (@p0, @p1, @p2, @p3);
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (1ms) [Parameters=[@p4='12468e33-6872-4d4d-59b2-08d93a5bb4d5', @p5='72e51fec-e51a-4ed0-709b-08d93a5bb4de'], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
INSERT INTO [CourseStudent] ([CoursesId], [StudentsId])
VALUES (@p4, @p5);
public static void ModifyExistingStudent()
{
using (var context = new SchoolContext())
{
var student = context.Students
.Where(s => EF.Functions.Like(s.FirstName, "Christian"))
.FirstOrDefault();
if (student == null)
{
return;
}
student.LastName = "Pulisic";
context.SaveChanges();
}
}
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [s].[Id], [s].[DateOfBirth], [s].[FirstName], [s].[LastName]
FROM [Students] AS [s]
WHERE [s].[FirstName] LIKE N'Christian'
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (13ms) [Parameters=[@p1='cc438b71-93ab-4a09-0bd0-08d93a59630c', @p0='Pulisic' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
UPDATE [Students] SET [LastName] = @p0
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;
public static void RemoveExistingStudent()
{
using (var context = new SchoolContext())
{
var student = context.Students
.Where(s => EF.Functions.Like(s.FirstName, "John"))
.FirstOrDefault();
if (student == null)
{
return;
}
context.Students.Remove(student);
context.SaveChanges();
}
}
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [s].[Id], [s].[DateOfBirth], [s].[FirstName], [s].[LastName]
FROM [Students] AS [s]
WHERE [s].[FirstName] LIKE N'John'
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (14ms) [Parameters=[@p0='72e51fec-e51a-4ed0-709b-08d93a5bb4de'], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
DELETE FROM [Students]
WHERE [Id] = @p0;
SELECT @@ROWCOUNT;
public static void AddNewStudentDisconnected()
{
var disconnectedStudent = new Student()
{
FirstName = "Isaac",
LastName = "Newton",
DateOfBirth = new DateTime(1643, 1, 4)
};
using (var context = new SchoolContext())
{
var studentEntry = context.Entry(disconnectedStudent);
if(disconnectedStudent.Id == Guid.Empty)
{
studentEntry.State = EntityState.Added;
}
else
{
studentEntry.State = EntityState.Modified;
}
//OR
//context.Students.Add(disconnectedStudent);
context.SaveChanges();
}
}
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (26ms) [Parameters=[@p0='677941ce-c690-473f-97b0-08d93a6ebb23', @p1='1643-01-04T00:00:00.0000000', @p2='Isaac' (Size = 4000), @p3='Newton' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
INSERT INTO [Students] ([Id], [DateOfBirth], [FirstName], [LastName])
VALUES (@p0, @p1, @p2, @p3);
public static void ModifyExistingStudentDisconnected()
{
Student disconnectedStudent;
using (var context = new SchoolContext())
{
disconnectedStudent = context.Students
.Where(s => EF.Functions.Like(s.FirstName, "Isaac"))
.FirstOrDefault();
}
using (var context = new SchoolContext())
{
var studentEntry = context.Entry(disconnectedStudent);
if (disconnectedStudent.Id == Guid.Empty)
{
studentEntry.State = EntityState.Added;
}
else
{
studentEntry.State = EntityState.Modified;
}
context.SaveChanges();
}
}
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (18ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [s].[Id], [s].[DateOfBirth], [s].[FirstName], [s].[LastName]
FROM [Students] AS [s]
WHERE [s].[FirstName] LIKE N'Isaac'
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 5.0.7 initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: SensitiveDataLoggingEnabled
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (17ms) [Parameters=[@p3='677941ce-c690-473f-97b0-08d93a6ebb23', @p0='1643-01-04T00:00:00.0000000', @p1='Isaac' (Size = 4000), @p2='Newton' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
UPDATE [Students] SET [DateOfBirth] = @p0, [FirstName] = @p1, [LastName] = @p2
WHERE [Id] = @p3;
SELECT @@ROWCOUNT;
public static void RemoveStudentDisconnected()
{
Student disconnectedStudent;
using (var context = new SchoolContext())
{
disconnectedStudent = context.Students
.Where(s => EF.Functions.Like(s.FirstName, "Christian"))
.FirstOrDefault();
}
var fakeStudent = new Student()
{
Id = disconnectedStudent.Id
};
using (var context = new SchoolContext())
{
context.Entry(fakeStudent).State = EntityState.Deleted;
context.SaveChanges();
}
}
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (17ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [s].[Id], [s].[DateOfBirth], [s].[FirstName], [s].[LastName]
FROM [Students] AS [s]
WHERE [s].[FirstName] LIKE N'Christian'
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 5.0.7 initialized 'SchoolContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: SensitiveDataLoggingEnabled
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (14ms) [Parameters=[@p0='cc438b71-93ab-4a09-0bd0-08d93a59630c'], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
DELETE FROM [Students]
WHERE [Id] = @p0;
SELECT @@ROWCOUN