0

Petrel にカスタム Ocean ワークステップがありますが、引数パッケージを永続化できません。私のパッケージには、以下に示すように PillarGrid オブジェクト (Gird、Property、Zone) が含まれています。

[Archivable(Version = 1, Release = "2013.6")]
public class MyArguments : DescribedArgumentsByReflection, IIdentifiable
{
    [Archived]
    private Grid grid = Grid.NullObject;

    [Archived]
    private int seedNumber;

    [Archived]
    private int numberRealizations = 1;

    [Archived]
    private Zone regionZone = Zone.NullObject;

    [Archived]
    private Property property = Property.NullObject;

    [Archived]
    private Droid droid = Droid.Empty;

    ...

    public DeeSseArguments()
        : base()
    {
        // adding this to datasource
        IDataSourceManager dsManager = DataManager.DataSourceManager;
        string DataSourceId = DeeSseDataSourceFactory.DataSourceId;
        StructuredArchiveDataSource dataSource = dsManager.GetSource(DataSourceId) as StructuredArchiveDataSource;
        this.droid = dataSource.GenerateDroid();
        dataSource.AddItem(this.droid, this);
    }

}

StructuredArchiveDataSource に基づいて DataSourceFactory を作成しました。

public class MyDataSourceFactory : DataSourceFactory
{
    public static string DataSourceId = "MyArgsPackId";

    public override Slb.Ocean.Core.IDataSource GetDataSource()
    {
        return new StructuredArchiveDataSource(DataSourceId, new[] { typeof(MyArguments) });
    }
}

この DataSourceFactory をモジュールメソッド「integrate」に登録しました。

プロジェクトを Petrel に保存しようとすると、次のエラー メッセージが表示されます。

この永続性を管理するにはどうすればよいですか?

4

1 に答える 1

1

PillarGrid およびその他の複合型は、この方法では永続化できません。

IIdentifiable オブジェクトの場合、DROID を永続化する必要があります。

後で、DataManager.Resolve を使用して、上記の DROID からオブジェクトを取得できます。

チッピー

于 2013-05-24T08:14:31.980 に答える