1

EF 4.1 モデルがあり、データベースから PERSON と ADDRESS の 2 つのテーブルが生成されます。

//このメソッドは動作します

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 が属するオブジェクトの関係マネージャーが既に ObjectContext にアタッチされているため、EntityCollection を初期化できませんでした。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 に答える