管理オブジェクト モデル : 推奨事項とヒント
このトピックでは、管理オブジェクト モデルを使用する際の推奨事項とヒントをいくつか示します。
管理オブジェクト モデルのコレクションを操作する
管理オブジェクト モデルのコレクションは、IEnumerable インターフェイスを実装し、コレクションでの単純な繰り返しに使用できる GetEnumerator() メソッドを提供します。返されるコレクションは揮発性です。つまり、このメソッドは、メタデータ オブジェクトのスナップショットを返すだけです。別のユーザーやアプリケーションがデータベース内のコレクションを変更 (要素を追加、変更、または削除) すると、スナップショットは同期がとれていない状態になります。そのため、わずかに時間のずれがある同じコレクションからインスタンス化された 2 つの列挙子で、そのコレクションから異なるスナップショットが返されることがあります。この "1 回だけの繰り返し" 設計により、必要なときにスナップショットを取得できるようになります。
IEnumerable インターフェイスを実装すると、Microsoft Visual C# の foreach セマンティクスを使用できます。コレクション オブジェクトを操作する 2 つの方法を次に示します。
どちらのメソッドも動作しますが、コレクション内の特定の要素にアクセスする場合は、リストがインデックス化されるメソッド 2 を使用してください。またこの場合、コレクションから要素を 1 つずつ列挙する必要がないため、メソッド 2 の方が高速になります。
メソッド 1
EntityCollection entityColl = mySysInstance.LobSystem.Entities;
foreach (Entity entity in entityColl)
{
if (entity.Name == "ProductModel")
{
entity.Identifiers.Create("ProductModelID", true, "System.Int32");
break;
}
}
メソッド 2
IList<Entity> entityCollection= new List<Entity>(mySysInstance.LobSystem.Entities);
entityCollection[3].Name = "XYZ";
.
ID と、GetById() による特定オブジェクトの取得
すべてのメタデータ オブジェクトには一意の ID が付いています。ID は、メタデータ パッケージの有効期間中は持続します。つまり、パッケージを削除して再インポートすると、オブジェクトは異なる ID になります。ただし、その場合でも ID は一意です。
メタデータ オブジェクトは、GetById() という名前のメソッドを提供します。このメソッドを使用すると、ID がわかっている場合にオブジェクトの特定のインスタンスにすばやくアクセスできます。通常は、このメソッドを使用してオブジェクトの ID を保存し、オブジェクトをすばやく取得するために後でそれを使用します。GetById() メソッドは、インスタンスの ID を取得します。次のコード例は、オブジェクトの ID を取得する方法を示しています。
IList<Entity> entityCollection = new List<Entity>(mySysInstance.LobSystem.Entities);
Int EID = entityCollection[4].Id;
…
…
//and use it later like this:
Entity e = Entity.GetById(EID);