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; }
}