【问题标题】:Entity framework to object with collection, with Automapper, exception on update实体框架与集合对象,使用 Automapper,更新时异常
【发布时间】:2012-07-25 08:30:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 不是 personDB 的问题,而是与 personDb 相关的集合
    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多