.net core 导航属性配置 - zLulus/My_Note GitHub Wiki
EF7不再允许隐式调用导航属性
以下示例使用了ABP .net core 2.0的框架
Activity表
public class Activity: FullAuditedEntity<long>
{
/// <summary>
/// 评论列表
/// </summary>
public List<ActivityComment> ActivityComments { get; set; }
}
ActivityComment表
public class ActivityComment : FullAuditedEntity<long>
{
/// <summary>
/// 外键
/// </summary>
public long ActivityId { get; set; }
/// <summary>
/// 导航属性
/// </summary>
public Activity Activity { get; set; }
}
配置
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//导航属性
modelBuilder.Entity<ActivityComment>()
.HasOne(p => p.Activity)
.WithMany(b => b.ActivityComments)
.HasForeignKey(p => p.ActivityId);
modelBuilder.Entity<Activity>()
.HasMany(x => x.ActivityComments)
.WithOne(x => x.Activity)
.HasForeignKey(x => x.ActivityId);
}
必须使用Including显示调用
private readonly IRepository<Activity, long> _activityRepository;
public ActivityManage(IRepository<Activity, long> activityRepository)
{
_activityRepository = activityRepository;
}
public async Task Test(EntityDto<long> input)
{
//GetAllIncluding()参数为空,不进行导航属性查询
var list =await _activityRepository.GetAllIncluding(x=>x.ActivityComments,x=>x.ActivityEvents,x=>x.ActivityInclusions).ToListAsync();
var entity = _activityRepository.GetAllIncluding(x => x.ActivityComments, x => x.ActivityEvents, x => x.ActivityInclusions).Where(x => x.Id == input.Id).FirstOrDefault();
}
fluent api用于复杂场景,继承,多对多之类的
https://docs.microsoft.com/en-us/ef/core/modeling/relationships
用于一对多关系时,对附属多条记录的处理
如果没有id,attach的默认行为是新增
如果有id,attach的默认行为是修改