1

我有一个 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; }
}
4

1 回答 1

0

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

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

于 2012-07-25T10:26:10.667 回答