实体框架更新父项并添加子对象。得到错误

时间:2018-03-03 17:36:58

标签: c# entity-framework-6 automapper repository-pattern

Edit期间,我必须使用表单中的值更新某些表,并且还必须在表上添加一些新记录。

我总是得到同样的错误:

  

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

我的观点模型如下:

public class CorporateCustomerUpdateViewModel
{
    public Guid Id { get; set; }
    public string FullName { get; set; }
    public CorporateCustomerViewModel CorporateCustomer { get; set; }
}

public class CorporateCustomerViewModel 
{
    public int BusinessTypeId { get; set; }
    public List<CorporateMemberViewModel> CorporateMembers { get; set; }
}

public class CorporateMemberViewModel
{
    public string IdNumber { get; set; }
    public string Name { get; set; }
    public string Document { get; set; }
} 

实体:

public class User
{   
    public Guid Id { get; set; }
    public string FullName { get; set; }
    public virtual CorporateCustomer CorporateCustomer { get; set; }
}

public class CorporateCustomer
{  
    public int BusinessTypeId { get; set; }
    public virtual ICollection<CorporateMember> CorporateMembers { get; set;}
}

public class CorporateMember
{
    public string IdNumber { get; set; }
    public string Name { get; set; }
    public string Document { get; set; }
}

我正在使用AutoMapper将视图模型中的字段映射到实体。

配置如下:

public class CorporateCustomerMapper : Profile
{
   CreateMap<CorporateCustomerUpdateViewModel, User>();
}

我正在尝试更新User表,如下所示:

public void UpdateCorporateCustomerDetail(CorporateCustomerUpdateViewModel model)
{
    var userRepo = _genericUnitOfWork.GetRepository<User, Guid>();

    var user = userRepo.GetById(model.Id); 
    var entity = _mapper.Map(model, user); 
    //mapping CorporateCustomerUpdateViewModel to User

     userRepo.Update(entity);
    _genericUnitOfWork.SaveChanges();
}

GetById

public TEntity GetById(TKey id)
{
    return _dbSet.Find(id);
}

在MAP之后,user.CorporateCustomer.CorporateMembers变为空 因为model.CorporateCustomer.CorporateMembers没有价值。

但是这不应该是null,因为在CorporateMembers期间我在数据库中已经有一些GetById

我认为这是问题,因为EF将更新空条目。

此处提供的链接是关于相同方案的讨论。

How to add/update child entities when updating a parent entity in EF

The relationship could not be changed because one or more of the foreign-key properties is non-nullable

我已经浏览了这两个链接。但是有一个ChildObjects和没有AutoMapper的讨论。我无法弄清楚我在哪里做错了什么,以及我应该在哪里更改我的代码。

请您建议一些代码更改或一些提示?

0 个答案:

没有答案