1

そのため、オブジェクトのコピーを作成する必要があります。IList HasAndBelongsToMany プロパティを持つ「場所」のモデルがここにありますが、これは面倒です。フィールド プロパティを取得してコピーする必要がありますが、参照のみをコピーします。これが私が持っているものです

public class place : ActiveRecordBase<place>
{
    public place() {  }

    private int place_id;
    [PrimaryKey("place_id")]
    virtual public int id
    {
        get { return place_id; }
        set { place_id = value; }
    }
    private IList<fields> Fields;
    [HasAndBelongsToMany(typeof(fields), Lazy = true, Table = "place_to_fields", ColumnKey = "place_id", ColumnRef = "field_id", NotFoundBehaviour = NotFoundBehaviour.Ignore, Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]
    virtual public IList<fields> field
    {
        get { return Fields; }
        set { Fields = value; }
    }
}

そして、このようにオートマッパーを使用します

place org = ActiveRecordBase<place>.Find(id);

Mapper.Reset();
Mapper.CreateMap<place, place>().ForMember(dest => dest.id, o => o.Ignore())
                                .ForMember(dest => dest.field, o => o.Ignore())
                                ; 
place copy = new place();
Mapper.Map(org, copy);

copy.SaveAndFlush();

私はフィールドをスキップしているので、これはうまくいきます。私が望んでいたのは、次のようなものでした:

Mapper.CreateMap<place, place>().ForMember(dest => dest.id, o => o.Ignore())
                                .ForMember(dest => dest.field.id, o => o.Ignore())
                                ; 

.ForMember(dest => dest.id, o => o.Ignore()) の最初の行を参照して、場所オブジェクトの参照 ID をコピーしないようにします。場所のプロパティ フィールドについても同じことを行う必要があります。ID を無視し、残りのプロパティで同じ値を持つ新しいエントリを作成する必要があります

4

1 に答える 1

0

フィールド タイプのマッピングを作成し、場所タイプに対して既に行ったように、フィールドの ID に「無視」オプションを追加する必要があります。

Mapper.CreateMap<fields, fields>().ForMember(dest => dest.id, o => o.Ignore());
Mapper.CreateMap<place, place>().ForMember(dest => dest.id, o => o.Ignore());
于 2012-08-10T03:15:50.010 に答える