回避策を見つけましたが、今週初めにFluorineFxでの作業に問題がありました。そこでは、LinqからSQLに生成されたオブジェクトをFlashにネットワーク経由で送信したいと考えていました。このオブジェクトには、Flashが必要としないプロパティが含まれていました。
[Association(Name="User_UserEntry", Storage="_UserEntries",
ThisKey="UserID", OtherKey="UserID")]
public EntitySet<UserEntry> UserEntries { ... }
しかし、Flexはこのタイプの再膨張を処理できず、次のようにスローします。
ArgumentError:エラー#2173:ストリーム内のオブジェクトを読み取ることができません。クラスflex.messaging.io.ArrayCollectionはflash.utils.IExternalizableを実装していませんが、externalizableクラスにエイリアスされています。
これで、プロパティをネットワーク経由で送信する必要がなくなったため、Marc Gravellが問題456624で提案した手順を試しました。まず、System.ComponentModel.DataAnnotationsのMetadataTypeAttributeを使用して属性を追加しました(問題に関するJasonWのコメントから見つかりました)。 393687:
[MetadataType(typeof(UserMetadata)]
public partial class User { }
internal class UserMetadata
{
[FluorineFx.Transient]
public EntitySet<UserEntry> UserEntries { get; set; }
}
残念ながら、FluorineFxはまだメタデータ属性をサポートしていないようです(これはそれほど驚くことではありませんが、まったく新しいものです)。
私がやらなければならなかったのは、Flashが気にかけているすべてのプロパティと、そうでないプロパティを備えた専用のDTOを作成することでした。最もエレガントなソリューションではありません。
それで、他の人がこの問題に遭遇し、それを解決するためのよりエレガントな方法を見つけましたか?