using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public static void Main()
Console.WriteLine("Hello World");
FakeDbContext context = new FakeDbContext();
var companiesData = new Company[]
Name = "Some name", Promo="Y", Contacts = new List<Contact> { new Contact {ContactName="John Doe", ContactNumber="(828)292-2912", CompanyID=1}},
Name = "Another name", Promo="N", Contacts = new List<Contact> { new Contact {ContactName="Jane Doe", ContactNumber="(828)292-2912", CompanyID=2}},
foreach (Company c in companiesData)
context.Companies.Add(c);
foreach (Contact contact in c.Contacts)
context.Contacts.Add(contact);
Console.WriteLine("Save done.");
var companies = context.Companies.ToList();
Console.WriteLine("companies.Count: " + companies.Count);
for (int i = 0; i < companies.Count; i++)
Console.WriteLine(string.Format("company[{0}].Name: {1}", i, companies[i].Name));
for (int j = 0; j < companies[i].Contacts.Count; j++)
Console.WriteLine(string.Format("company[{0}].Contacts[{1}].ContactName: {2}", i, j, companies[i].Contacts[j].ContactName));
Console.WriteLine("Bye World");
public int ID { get; set; }
public string Name { get; set; }
public string Promo { get; set; }
public virtual List<Contact> Contacts { get; set; }
public int ContactID { get; set; }
public int CompanyID { get; set; }
public virtual Company Company { get; set; }
public string ContactName { get; set; }
public string ContactNumber { get; set; }
public interface IFakeContext
IDbSet<Company> Companies { get; }
IDbSet<Contact> Contacts { get; }
public class EmployeeContext : DbContext, IFakeContext
public IDbSet<Company> Companies { get; set; }
public IDbSet<Contact> Contacts { get; set; }
public class FakeDbContext : IFakeContext
this.Companies = new FakeCompanySet();
this.Contacts = new FakeContactSet();
public IDbSet<Company> Companies { get; private set; }
public IDbSet<Contact> Contacts { get; private set; }
public class FakeCompanySet : FakeDbSet<Company>
public override Company Find(params object[] keyValues)
return this.SingleOrDefault(d => d.ID == (int)keyValues.Single());
public class FakeContactSet : FakeDbSet<Contact>
public override Contact Find(params object[] keyValues)
return this.SingleOrDefault(e => e.ContactID == (int)keyValues.Single());
public class FakeDbSet<T> : IDbSet<T>
ObservableCollection<T> _data;
_data = new ObservableCollection<T>();
_query = _data.AsQueryable();
public virtual T Find(params object[] keyValues)
throw new NotImplementedException("Derive from FakeDbSet<T> and override Find");
return Activator.CreateInstance<T>();
public TDerivedEntity Create<TDerivedEntity>() where TDerivedEntity : class, T
return Activator.CreateInstance<TDerivedEntity>();
public ObservableCollection<T> Local
Type IQueryable.ElementType
get { return _query.ElementType; }
System.Linq.Expressions.Expression IQueryable.Expression
get { return _query.Expression; }
IQueryProvider IQueryable.Provider
get { return _query.Provider; }
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
return _data.GetEnumerator();
IEnumerator<T> IEnumerable<T>.GetEnumerator()
return _data.GetEnumerator();