2

我正在尝试更新由 automapper 绑定获取的模型。

当我的更新功能执行

Context.Entry(obj).State = EntityState.Modified;

实体框架抛出此异常

违反了多重性约束。关系“Creci.Infra.Data.Context.LegislationCategory_Legislations”的角色“LegislationCategory_Legislations_Source”具有多重性 1 或 0..1。

如果我尝试在不使用 automapper 的情况下更新模型,它可以正常工作。

关系是

public class LegislationCategoryMap : EntityTypeConfiguration<LegislationCategory>
    {
        public LegislationCategoryMap()
        {
            ...

            HasMany(x => x.Legislations)
                .WithRequired(x => x.Category)
                .WillCascadeOnDelete(true);
        }
    }

public class LegislationMap : EntityTypeConfiguration<Legislation>
    {
        public LegislationMap()
        {
            ...

            HasRequired(x => x.Category);
        }
    }

我的映射器配置文件配置是

CreateMap<EditLegislationViewModel, Legislation>()
                .EqualityComparision((vm, m) => vm.Id == m.Id)
                .AfterMap((vm, m) =>
                {
                   ...

                    if (vm.Category == null && vm.CategoryId != 0)
                    {
                        m.Category = new LegislationCategoryRepository().GetById(vm.CategoryId);
                    }
                });

当视图模型从请求绑定时,我使用 aftermap 将类别映射到立法对象。

我的控制器代码是

var model = Mapper.Map(viewModel, repository.GetById(id));
            repository.Update(model);

和更新功能

public void Update(TEntity obj)
        {
            Validate(obj);

            using (var transaction = Context.Database.BeginTransaction())
            {
                try
                {
                    Context.Entry(obj).State = EntityState.Modified;
                    Context.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }
4

0 回答 0