EF经验-更新外键

本经验目的在于减少EF实际执行的sql命令。

举例:
声明实体
BaseEntity

[Serializable]
    public class BaseEntity
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        [Key]
        public string iGuid { get; set; }
        public string iCreatedBy { get; set; }
        public DateTime iCreatedOn { get; set; }
        public string iUpdatedBy { get; set; }
        public DateTime iUpdatedOn { get; set; }
        public bool iStatus { get; set; }
        public bool iIsDeleted { get; set; }
        public void NewId()
        {
            iGuid = Guid.NewGuid().ToString("N");
        }
    }

SysPage

[Serializable]
    [Table("SysPage")]
    public class SysPage : BaseEntity
    {
        public string Name { get; set; }
        public string Note { get; set; }
        [ForeignKey("CategoryId")]
        public SysPageCategory Category { get; set; }

        public string PageJson { get; set; }
        public string DbJson { get; set; }
    }

SysPageCategory

[Serializable]
    [Table("SysPageCategory")]
    public class SysPageCategory : BaseEntity
    {
        public string Name { get; set; }
    }

其中SysPage的外键是CategoryId,指向SysPageCategory的主键

更新外键的实例

public async Task<(bool, string)> Save(SM_SysPage model)
        {
            var entity = await _dbContext.SysPages.Include(d => d.Category).FirstOrDefaultAsync(d => d.iGuid == model.iGuid);
            var category = new SysPageCategory { iGuid = model.Category.iGuid };
            _dbContext.Entry(category).State = EntityState.Unchanged;
            if (entity == null)
            {
                entity = new SysPage
                {
                    iCreatedOn = DateTime.Now
                };
                entity.NewId();
                _dbContext.SysPages.Add(entity);
            }
            entity.iUpdatedOn = DateTime.Now;
            entity.Name = model.Name;
            entity.Note = model.Note;
            entity.Category = category;
            entity.DbJson = model.DbJson;
            entity.PageJson = model.PageJson;
            var ok = await _dbContext.SaveChangesAsync() > 0;
            return (ok, ok ? entity.iGuid : string.Empty);
        }

以上步骤避免了SysPage更新Category时去查询SysPageCategory表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值