skynyrd
11/12/2016 - 8:15 AM

Entity Framework Core Sample App

Entity Framework Core Sample App

In order to run create db migration

PM > Add-Migration Init
.
.
.
PM > Script-Migration
.
.
.
PM> Update-Database

Add these to dependencies:

"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final",
"Microsoft.EntityFrameworkCore.Design": "1.1.0-preview1-final"

Add to tools:

"tools": {
  "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
  "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final"
},

Sample Entities:

public class SampleDocument
{
    public Guid Id { get; set; }
    public string StringField { get; set; }
    public int IntField { get; set; }
    public IEnumerable<InnerDocument> InnerDocuments { get; set; }    
    public SampleDocument()
    {
    }
}
public class InnerDocument
{
    public Guid Id { get; set; }
    public string InnerStringField { get; set; }
    public int InnerInt { get; set; }
    public Guid ParentId { get; set; }
    public InnerDocument()
    {    
    }
}

Add DB Context:

public class SampleDocumentDbContext : DbContext
{
    public DbSet<SampleDocument> SampleDocuments { get; set; }
    public DbSet<InnerDocument> InnerDocuments { get; set; }    
    public SampleDocumentDbContext(DbContextOptions<SampleDocumentDbContext> options) 
        : base(options)
    {
    }
}

Add Repository:

public interface ISampleRepository
{
    IEnumerable<SampleDocument> GetAll();
    SampleDocument GetById(Guid id);
    SampleDocument Add(SampleDocument document);
}

public class SampleRepository : ISampleRepository
{
    private readonly SampleDocumentDbContext context;

    public SampleRepository(SampleDocumentDbContext context)
    {
        this.context = context;
    }

    public IEnumerable<SampleDocument> GetAll()
    {
        return context.SampleDocuments.Include(d => d.InnerDocuments);
    }

    public SampleDocument GetById(Guid id)
    {
        return context.SampleDocuments.Include(d => d.InnerDocuments).Single(d => d.Id == id);
    }

    public SampleDocument Add(SampleDocument document)
    {
        context.Add(document);
        context.SaveChanges();
        return document;
    }
}

In StartUp:

public void ConfigureServices(IServiceCollection services)
{
    // Add The repository
    // Add DbContext
    services.AddScoped<ISampleRepository, SampleRepository>();
    services.AddDbContext<SampleDocumentDbContext>(options => 
    options.UseSqlServer("Server=.\\SQLEXPRESS;Database=EFCoreSample;Trusted_Connection=true;MultipleActiveResultSets=true"));
}