Sly*_*Sly 5 validation entity-framework lazy-loading code-first
使用EF代码第一种方法和关联,我是一个非常奇怪的行为.我有两个实体:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我需要KiSection属性的必需属性才能获得级联删除.
问题是以下 - 在此代码中:
var mainRegion = context.Regions.Single(x => x.RegionId == id);
mainRegion.IsMain = true;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我得到的例外是必填字段未初始化.但它是目前只是没有加载.当我使用这个实体时,我不会写任何明确包含属性的内容.我该怎么做才能克服这个问题?
UPDATE
我之所以确定它的延迟加载问题是因为:
var primaryRegion = context.Regions
.Include(x => x.KpiSection)
.Single(x => x.RegionId == id);
Run Code Online (Sandbox Code Playgroud)
解决了这个问题,但它绝对是一个糟糕的解决方案.
Lad*_*nka 11
这就是为什么你不应该使用数据注释.数据注释是错误的功能,因为它们同时进行映射和验证(违反单一责任) - 正如您所看到的那样并不总是您想要的.所以你目前的选择是:
context.Configuration.ValidateOnSaveEnabled = falseKpiSectionId在您的Region实体中公开不可为空的外键属性(您Required的导航属性不需要属性).例:
modelBuilder.Entity<GlobalKpiSection>()
.WithMany(s => s.Regions)
.HasRequired(r => r.KpiSection);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |