具有集合的对象的实体框架,具有Automapper,更新时的异常

时间:2012-07-25 08:30:58

标签: asp.net-mvc entity-framework orm entity-framework-4 automapper

我有一个EF 4.1模型,我的数据库生成了两个表PERSON和ADDRESS。

//此方法有效

public void Update(IPerson person)
{
    var personDb = _dataContext.PERSON.SingleOrDefault(x => x.ID == person.Id);
    Mapper.Map<Person, PERSON>((Person)person, personDb);
    _dataContext.SaveChanges();
}

但是当我在Automapper映射中删除.Ignore()时,我得到了这个异常:

无法初始化EntityCollection,因为EntityCollection所属对象的关系管理器已附加到ObjectContext。只应在反序列化对象图时调用InitializeRelatedCollection方法初始化新的EntityCollection。

我想在现有地址中添加新地址时保存人员和地址。

有什么想法吗?

谢谢,

public void AutomapperInit()
{
    Mapper.CreateMap<Person, PERSON>()
        .ForMember(x => x.ADDRESS, opt => opt.Ignore());
    Mapper.CreateMap<PERSON, Person>()
        .ForMember(dest => dest.Address, option => option.MapFrom(src => src.ADDRESS.Select(address => Mapper.Map<ADDRESS, Address>(address)).ToList()));
    Mapper.CreateMap<Address, ADDRESS>();
    Mapper.CreateMap<ADDRESS, Address>()
        .ForMember(dest => dest.Rue, option => option.MapFrom(src => src.STREET));
}

public interface IPerson
{
    int Id { get; set; }
    string FirstName { get; set; }
    string LastName { get; set; }
    ICollection<IAddress> Address { get; set; }
}

public interface IAddress
{
    string Rue { get; set; }
    string Number { get; set; }
    int PersonId { get; set; }
}

class Person : IPerson
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public ICollection<IAddress> Address { get; set; }
}

 class Address : IAddress
{
    public string Rue { get; set; }
    public string Number { get; set; }
    public int PersonId { get; set; }
}

1 个答案:

答案 0 :(得分:0)

var personDb = Mapper.Map<Person, PERSON>((Person)person, personDb); 
_dataContext.Attach(personDb);
_dataContext.SaveChanges();

给出你期望的结果,还是我误解了你的问题?