私は現在、Entity Frameworkと組み合わせたC#MVCプロジェクトに取り組んでいます。ここには、ユーザーが必要なデータを入力する必要があるビューページ(作成ページ)があります。以下のコードのようなモデルを入手しました。ユーザーがを持っていて、Boat
そのプロパティを選択できる場所。
public class Boat {
public string Name{ get; set; }
}
public class Slowboat : Boat {
public int Length { get; set; }
public virtual Engine SpeedSource { get; set; }
}
public class Speedboat : Boat {
public virtual List<?> SpeedSource { get; set; }
public int Topspeed {get; set; }
}
public class Engine {
public string EningeType { get; set; }
public int Horsepower { get; set; }
public string Manufacturer { get; set; }
}
public class Sail {
public int SailCount { get; set; }
public List<int> SailSizes { get; set; }
public string Manufacturer { get; set; }
}
すべてがうまくいきます、スピードボートはいくつかの帆またはエンジンを持っています。この問題は、スピードボートに1つ以上のエンジンと帆がある場合に発生します。
List<object>
typeを使用してみましたが、投稿時にデータがデータベースに保存されませんでした。下のような一種のラッパークラスは迅速な解決策ですが、私の意見ではより良いものが必要です。
public class SpeedPower {
public Engine Engine_ { get; set; }
public Sail Sail_ { get; set; }
}
だから私の質問は:どのようにして複数のタイプを1つのリストに保存するのですか?
可能な解決策をありがとう。
編集:Thomas Flinkowが提案したように、相互のプロパティのいくつかを使用してインターフェイスを作成できます。
public interface ISpeedSource {
string Manufacturer { get; set; }
}
public class Speedboat : Boat {
public virtual List<ISpeedSource> SpeedSource { get; set; }
public int Topspeed {get; set; }
}
では、このようなインターフェイスを使用すると、他のプロパティは保存されますか?
次のように、すべての「速度ソース」を定義できます。
public class Engine : ISpeedSource { ... }
public class Sail : ISpeedSource { ... }
ISpeedSource
単純であるインターフェイスを(多分空、必ずしも必要ではないが)
public interface ISpeedSource { ... }
そして、次のSpeedboat
ようなクラスを作成します。
public class Speedboat : Boat
{
public virtual List<ISpeedSource> SpeedSource { get; set; }
public int Topspeed { get; set; }
}
空のインターフェイスは避ける必要があるため、Davidが提案したように設計を考えすぎることをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加