我正在尝试更新由 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;
}
}
}