I’m a very strange behavior with EF code first approach and associations. I have two entities:
public class GlobalKpiSectionn
{
public GlobalKpiSection()
{
this.Regions = new HashSet<Region>();
}
public virtual ICollection<Region> Regions { get; protected set; }
}
public class Region
{
public int RegionId { get; set; }
public bool IsMain { get; set; }
[Required]
public virtual GlobalKpiSection KpiSection { get; set; }
}
I need required attribute on KiSection property in order to get cascade deletes.
The problem is the following – in this code:
var mainRegion = context.Regions.Single(x => x.RegionId == id);
mainRegion.IsMain = true;
context.SaveChanges();
I’m getting exception that Required field is not initialized. But it is present just not loaded. I don’t what to write everywhere explicit includes for properties when I use this entity. What can I do to overcome this? 
UPDATE
The reason why I’m sure its lazy loading issue is that:
var primaryRegion = context.Regions
.Include(x => x.KpiSection)
.Single(x => x.RegionId == id);
Solves the issue, but its definitely awful solution.
That is why you should not use data annotations. Data annotations are wrong feature because they do both mapping and validation (violation of single responsibility) – as you see it is not always what you want. So your current options are:
context.Configuration.ValidateOnSaveEnabled = falseKpiSectionIdforeign key property in yourRegionentity (you will not needRequiredattribute on your navigation property).Example: