Skip to content

Instantly share code, notes, and snippets.

@lbargaoanu
Last active November 2, 2015 16:11
Show Gist options
  • Save lbargaoanu/0ae26a08d1a7821c2c91 to your computer and use it in GitHub Desktop.
Save lbargaoanu/0ae26a08d1a7821c2c91 to your computer and use it in GitHub Desktop.
static void Main(string[] args)
{
Database.SetInitializer(new Initializer());
Mapper.Initialize(cfg => {
cfg.CreateMap<TrainingCourse, TrainingCourseDto>().Include<TrainingCourse, ParentTrainingCourseDto>().ForMember(d=>d.Value, o=>o.MapFrom(d=>d.Content.Count()));
cfg.CreateMap<TrainingCourse, ParentTrainingCourseDto>();
cfg.CreateMap<TrainingContent, TrainingContentDto>();
});
Mapper.AssertConfigurationIsValid();
var context = new ClientContext();
context.TrainingCourses.ProjectTo<ParentTrainingCourseDto>().FirstOrDefault(n => n.CourseName == "Course 1").Dump();
}
class Initializer : DropCreateDatabaseAlways<ClientContext>
{
protected override void Seed(ClientContext context)
{
var course = new TrainingCourse{ CourseName = "Course 1" };
context.TrainingCourses.Add(course);
var content = new TrainingContent{ ContentName = "Content 1", Course = course };
context.TrainingContents.Add(content);
content = new TrainingContent{ ContentName = "Content 2", Course = course };
context.TrainingContents.Add(content);
course.Content.Add(content);
}
}
class ClientContext : DbContext
{
public ClientContext() : base(@"Server=(localdb)\v12.0;Integrated Security=true;Initial Catalog = ClientContext;")
{
}
public DbSet<TrainingCourse> TrainingCourses { get; set; }
public DbSet<TrainingContent> TrainingContents { get; set; }
}
public class TrainingCourse
{
public TrainingCourse()
{
Content = new List<TrainingContent>();
}
public TrainingCourse(TrainingCourse entity)
{
Mapper.Map(entity, this);
}
[Key]
public int CourseId { get; set; }
public string CourseName { get; set; }
public virtual IList<TrainingContent> Content { get; set; }
}
public class TrainingContent
{
public TrainingContent()
{
}
[Key]
public int ContentId { get; set; }
public string ContentName { get; set; }
public virtual TrainingCourse Course { get; set; }
}
public class TrainingCourseDto
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public ICollection<TrainingContentDto> Content { get; set; }
public int Value { get; set; }
}
public class ParentTrainingCourseDto : TrainingCourseDto
{
[IgnoreMap]
public new ICollection<TrainingContentDto> Content { get; set; }
}
public class TrainingContentDto
{
public int ContentId { get; set; }
public string ContentName { get; set; }
public ParentTrainingCourseDto Course { get; set; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment