アプリケーションのすべてのエンティティ クラスは、次のインターフェイスを実装する必要があります。
public interface IEntity<T> {
T Id { get; set; }
}
ほとんどの場合、T の型は int になります。ただし、IDが複合IDである可能性がある場合に対処する必要があります。たとえば、次の実装を使用できます。
public class User : IEntity<int> {
public int Id { get; set; }
...
}
public class Site : IEntity<int> {
public int Id { get; set; }
...
}
public class UserSite : IEntity<UserSiteIdentifier> {
public UserSiteIdentifier Id { get; set; }
...
}
// Note: IIdentifier doesn't have any members
public class UserSiteIdentifier : IIdentifier {
public User User { get; set; }
public Site Site { get; set; }
...
public override ToString() {
return User.Id + "|" + Site.Id;
}
}
エンティティ インスタンス (型が不明) が与えられた場合、ID を取得して文字列に変換する必要があります。私は言うことができます:
object entity = ???;
string id;
if (entity is IEntity<int>)
id = ((IEntity<int>)entity).Id.ToString();
else if (entity is IEntity<IIdentifier>)
id = ((IEntity<IIdentifier>)entity).Id.ToString();
しかし、複合IDを処理するためだけにほぼ同じコードを繰り返さなければならないため、このコードは私には合いません。
誰かが私にもっときれいな解決策を教えてくれれば幸いです。このアプリケーションはまだプロトタイプであり、提案に対して完全にオープンです。ありがとう