using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
public int BlogId { get; set; }
public string Url { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public virtual ICollection<Blog> Blogs { get; set; }
public Guid OID { get; set; }
public Blog Blog { get; set; }
public Post Post { get; set; }
public class BloggingContext : DbContext
public BloggingContext(DbContextOptions<BloggingContext> options) : base(options)
protected override void OnModelCreating(ModelBuilder modelBuilder)
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<BlogPost>().HasKey(x=>x.OID);
modelBuilder.Entity<Blog>().HasMany(x => x.Posts).WithMany(x => x.Blogs)
x => x.HasOne(x => x.Post).WithMany(),
x => x.HasOne(x => x.Blog).WithMany()
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
private BloggingContext _context;
public BlogService(BloggingContext context)
public void Add(string url)
var blog = new Blog{Url = url};
blog.Posts = new List<Post>{new Post{Title = "Test"}};
_context.Blogs.Add(blog);
public IEnumerable<Blog> Find(string term)
return _context.Blogs.Where(b => b.Url.Contains(term)).OrderBy(b => b.Url).ToList();
static void Main(string[] args)
Console.WriteLine("This is an example of using EF Core InMemory Database");
Console.WriteLine("======================================================");
var options = new DbContextOptionsBuilder<BloggingContext>().UseInMemoryDatabase(databaseName: "Add_writes_to_database").Options;
using (var context = new BloggingContext(options))
var service = new BlogService(context);
service.Add("http://sample.com");
using (var context = new BloggingContext(options))
Console.WriteLine($"In collection Blog.Posts: {context.Blogs.Include(x => x.Posts).Single().Posts.Count}");
Console.WriteLine($"In ChangeTracker Blogs: {context.ChangeTracker.Entries<Blog>().Count()}");
Console.WriteLine($"In ChangeTracker Posts: {context.ChangeTracker.Entries<Post>().Count()}");
Console.WriteLine($"In database Blog<->Post: {context.Posts.Where(x=>x.Blogs.Contains(context.Blogs.Single())).Count()}");
Console.WriteLine($"In ChangeTracker BlogPosts: {context.ChangeTracker.Entries<BlogPost>().Count()}");
Console.WriteLine($"In collection Blogs..Posts: {context.Blogs.Include(x => x.Posts).SelectMany(x=>x.Posts).Count()}");