ASP.Net使用法シリーズ:ベースクラスからLINQ/EFクラスのプロパティを呼び出す方法
例えばDogs/Cats/Cows/...、いずれも異なるAgeメソッドがあり、そのベースクラスから同じメソッドShowAgeでこれらの異なるAgeを表示するには、ベースクラスAnimalのvirtual関数を借りることができます.たとえば、次のようにします.
overrideはoverrideがなければanimalが自分のAgeを呼び出すため、重要です.DogとCatがLINQ/EFで自動的に生成されるクラスであれば、overrideというキーワードがなければ、このような状況が発生します.
もちろんLINQ/EFで生成されるコードに毎回手で加えることはできませんが、どうすればいいですか?
前回この問題に遭遇して、検索してはいけなくて、半日テストして1つの方法を見つけて、今日再び使って、珍しく投稿して共有するとは言えません.
Animalでは、これらのコードを使用します.
この方法は実は「継承」とはあまり関係なく、純粋にデータベーステーブルの属性を直接読み取って、応急措置をとることができます.
-
- [csharp] view plaincopy
- 01.public class Animal
- 02.{
- 03. public virtual Age
- 04. {
- 05. get {....}
- 06. set {....}
- 07. }
- 08. public ShowAge()
- 09. {
- 10. Show(Age);
- 11. }
- 12.}
- 13.
- 14.public class Dog : Animal
- 15.{
- 16. public override Age
- 17. {
- 18. get {...}
- 19. set {...}
- 20. }
- 21.}
- 22.public class Cat : Animal
- 23.{
- 24. public override Age
- 25. {
- 26. get {...}
- 27. set {...}
- 28. }
overrideはoverrideがなければanimalが自分のAgeを呼び出すため、重要です.DogとCatがLINQ/EFで自動的に生成されるクラスであれば、overrideというキーワードがなければ、このような状況が発生します.
もちろんLINQ/EFで生成されるコードに毎回手で加えることはできませんが、どうすればいいですか?
前回この問題に遭遇して、検索してはいけなくて、半日テストして1つの方法を見つけて、今日再び使って、珍しく投稿して共有するとは言えません.
Animalでは、これらのコードを使用します.
-
- [csharp] view plaincopy
- 01.public virtual int Age
- 02.{
- 03. get
- 04. {
- 05. PropertyInfo pi = this.GetType().GetProperty("Age");
- 06. int age = (int)pi.GetValue(this, new object[] {});
- 07. return age;
- 08. }
- 09. set
- 10. {
- 11. PropertyInfo pi = this.GetType().GetProperty("Age");
- 12. pi.SetValue(this, value, new object[] { });
- 13. }
- 14.}
この方法は実は「継承」とはあまり関係なく、純粋にデータベーステーブルの属性を直接読み取って、応急措置をとることができます.