EF - Change Tracker 2

CSharp · Console

/Program.cs

// @nuget: EntityFramework

using System;
using System.Data.Entity;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Infrastructure;

public class Program
{
	public static void Main()
	{
		InsertData();
		
		
		using (var context = new BookStore())
		{
			Console.WriteLine("Update Author");
			Author author = context.Authors
				.FirstOrDefault();
            
			author.Name = "Russell";
			
            Console.WriteLine("Context tracking changes of {0} entities.", context.ChangeTracker.Entries().Count());
            DisplayTrackedEntities(context.ChangeTracker);

		}
		
	}
	
	private static void DisplayTrackedEntities(DbChangeTracker changeTracker)
    {
        var entries = changeTracker.Entries();
        foreach (var entry in entries)
        {
			Console.WriteLine("Entity Name: {0}", entry.Entity.GetType().FullName);
            Console.WriteLine("Status: {0}", entry.State);
        }
    }

	
	public static void InsertData()
	{
		using (var context = new BookStore())
		{
			Author author1 = new Author()
		    {
		        Name = "Mark",
		        Books = new List<Book>
				{
					new Book() { Title = "Fundamentals of Computer Programming with C#"},
					new Book() { Title = "Java: A Beginner's Guide"},
				}
		    };
			Author author2 = new Author()
		    {
		        Name = "Andy",
		        Books = new List<Book>
				{
					new Book() { Title = "SQL: The Ultimate Beginners Guide"}
				}
		    };
			
			Author author3 = new Author()
		    {
		        Name = "Johny",
		        Books = new List<Book>
				{
					new Book() { Title = "Learn VB.NET"},
					new Book() { Title = "C# Fundamentals for Absolute Beginners"},
				}
		    };
			
		    context.Authors.Add(author1);
			context.Authors.Add(author2);
			context.Authors.Add(author3);

		    context.SaveChanges();
		}
	}
	
	public class BookStore : DbContext
    {
        public BookStore() : base(FiddleHelper.GetConnectionStringSqlServer())
        {
        }
	

        public DbSet<Author> Authors { get; set; }
        public DbSet<Book> Books { get; set; }
    }

     public class Book
	{
    	public int BookId { get; set; }
	    public string Title { get; set; }
	    public int AuthorId { get; set; }
	    [ForeignKey("AuthorId")]
    	public Author Author { get; set; }
	}

    public class Author
	{
    	public int AuthorId { get; set; }
    	public string Name { get; set; }
		public virtual ICollection<Book> Books { get; set; }
	}
}
;