public class Student { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime Created { get; set; } = DateTime.Now; public IColletion Objectives { get; set; } public ICollection Goals { get; set; } } public class Goal { public Guid Id { get; set; } public string Name { get; set; } public DateTime Created { get; set; } public DateTime? Started { get; set; } } public class Objective { public Guid Id { get; set; } public string Name { get; set; } public string Description { get; set; } public DateTime Target { get; set; } public Student Student { get; set; } public ICollection Events { get; set; } public ObjectiveType Type { get; set; } } public abstract class Event { public Guid Id { get; set; } public DateTime StartDate { get; set; } public DateTime? EndDate { get; set; } public Objective Objective { get; set; } } public class YesNoEvent : Event { public bool Occurred { get; set; } } public class FrequencyEvent : Event { public int Instances { get; set; } } public enum ObjectiveType { [Description("Yes/No")] YesNo = 0, Percent = 1, [Desciption("Frequency of behavior")] Frequency = 2 }